├── .gitignore ├── .prettierrc ├── .terserrc.js ├── babel.config.js ├── build └── mrp.user.js ├── mrp-script.iml ├── package.json ├── readme.md ├── src ├── components │ ├── button.ts │ ├── calcPrices.ts │ ├── catalogObserver.ts │ ├── router.ts │ ├── sortProducts.ts │ ├── stylesInjector.ts │ ├── toggle.ts │ └── urlObserver.ts ├── constants.ts ├── global.d.ts ├── icons.ts ├── index.ts ├── pages │ ├── basket.ts │ ├── checkout.ts │ ├── common.ts │ ├── favorites.ts │ ├── page.ts │ └── product.ts ├── styles │ ├── button.less │ ├── catalog.less │ ├── index.less │ ├── price.less │ ├── toggle.less │ └── toolbar.less └── utils.ts ├── tsconfig.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .parcel-cache 3 | .vscode 4 | .DS_Store 5 | .scannerwork 6 | node_modules 7 | yarn-error.log 8 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "avoid", 3 | "trailingComma": "es5", 4 | "tabWidth": 4, 5 | "semi": true, 6 | "singleQuote": true, 7 | "printWidth": 120, 8 | "endOfLine": "lf" 9 | } 10 | -------------------------------------------------------------------------------- /.terserrc.js: -------------------------------------------------------------------------------- 1 | const pkg = require('./package.json'); 2 | 3 | const preamble = ` 4 | // ==UserScript== 5 | // @name Megamarket Real Price 6 | // @description Выводит цены с учетом бонусов и добавляет сортировку по ним 7 | // @version ${pkg.version} 8 | // @author ${pkg.author} 9 | // @license MIT 10 | // @match *://*.megamarket.ru/* 11 | // @namespace http://tampermonkey.net/ 12 | // @icon https://www.google.com/s2/favicons?sz=64&domain=megamarket.ru 13 | // @homepageURL https://github.com/undfndusr/mrp 14 | // @downloadURL https://github.com/undfndusr/mrp/raw/master/build/mrp.user.js 15 | // @updateURL https://github.com/undfndusr/mrp/raw/master/build/mrp.user.js 16 | // @run-at document-end 17 | // @grant GM.setValue 18 | // @grant GM.getValue 19 | // ==/UserScript== 20 | `.slice(1); 21 | 22 | // https://github.com/parcel-bundler/parcel/pull/2666#issuecomment-563054225 23 | module.exports = { 24 | compress: false, 25 | output: { 26 | preamble, 27 | }, 28 | }; 29 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = function (api) { 2 | const isProdMode = process.env.NODE_ENV === 'production'; 3 | 4 | api.cache(!isProdMode); 5 | 6 | const plugins = isProdMode ? ['transform-remove-console'] : []; 7 | 8 | return { 9 | plugins, 10 | }; 11 | }; 12 | -------------------------------------------------------------------------------- /build/mrp.user.js: -------------------------------------------------------------------------------- 1 | // ==UserScript== 2 | // @name Megamarket Real Price 3 | // @description Выводит цены с учетом бонусов и добавляет сортировку по ним 4 | // @version 2.0.7 5 | // @author undfndusr 6 | // @license MIT 7 | // @match *://*.megamarket.ru/* 8 | // @namespace http://tampermonkey.net/ 9 | // @icon https://www.google.com/s2/favicons?sz=64&domain=megamarket.ru 10 | // @homepageURL https://github.com/undfndusr/mrp 11 | // @downloadURL https://github.com/undfndusr/mrp/raw/master/build/mrp.user.js 12 | // @updateURL https://github.com/undfndusr/mrp/raw/master/build/mrp.user.js 13 | // @run-at document-end 14 | // @grant GM.setValue 15 | // @grant GM.getValue 16 | // ==/UserScript== 17 | var e; 18 | (function (e) { 19 | e['BASKET'] = 'BASKET'; 20 | e['CHECKOUT'] = 'CHECKOUT'; 21 | e['COMMON'] = 'COMMON'; 22 | e['PRODUCT'] = 'PRODUCT'; 23 | e['FAVORITES'] = 'FAVORITES'; 24 | })(e || (e = {})); 25 | const t = { 26 | ['BASKET']: '/multicart/', 27 | ['CHECKOUT']: '/multicart/checkout/', 28 | ['PRODUCT']: '/catalog/details/', 29 | ['FAVORITES']: '/personal/favorites/', 30 | }; 31 | const o = { 32 | ['BASKET']: '.multicart-item__summary', 33 | ['CHECKOUT']: '.precheck-block', 34 | ['COMMON']: '[data-product-id]', 35 | ['FAVORITES']: '[data-product-id]', 36 | ['PRODUCT']: '.pdp-sales-block .bonus-amount', 37 | }; 38 | const r = { 39 | INIT_DELAY: 2e3, 40 | REAL_PRICE_CLASSNAME: 'mrp-real-price', 41 | MRP_TOOLBAR_CLASSNAME: 'mrp-toolbar', 42 | CATALOG_WRAPPER_SELECTOR: '.r', 43 | CATALOG_FILTER_SELECTOR: '.r .filter', 44 | BASKET_TOTAL_PRICE_SELECTOR: '[class*="__total-price-value"]', 45 | PRODUCT_SELECTOR: '[id][data-product-id]', 46 | PRODUCT_PRICE_SELECTOR: '.item-price', 47 | PRODUCT_OFFERS_SECTIONS: '.product-offers', 48 | FAVORITES_CATALOG_WRAPPER_SELECTOR: '.personal-listing__container', 49 | SORT_TOGGLE_KEY: 'sortToggle', 50 | CURRENT_PAGE_URL_KEY: 'currentPageUrl', 51 | }; 52 | const n = [ 53 | { wrapperSelector: '.pdp-sales-block', priceSelector: '[class*="__price-final"]', bonusSelector: '.bonus-amount' }, 54 | { wrapperSelector: '.product-list-item-price__money', priceSelector: '.amount', bonusSelector: '.bonus-amount' }, 55 | { 56 | wrapperSelector: '.product-offer-price', 57 | priceSelector: '.product-offer-price__amount', 58 | bonusSelector: '.bonus-amount', 59 | }, 60 | { 61 | wrapperSelector: '.goods-item-card__money', 62 | priceSelector: '.goods-item-card__amount', 63 | bonusSelector: '.bonus-amount', 64 | }, 65 | { 66 | wrapperSelector: '.catalog-item-regular-desktop__price-block', 67 | priceSelector: '.catalog-item-regular-desktop__price', 68 | bonusSelector: '.bonus-amount', 69 | }, 70 | { 71 | wrapperSelector: '.multicart-item__summary', 72 | priceSelector: '.cart-summary-redesign__total-price-value', 73 | bonusSelector: '.bonus-amount', 74 | }, 75 | { wrapperSelector: '.cart-item-price', priceSelector: '.price', bonusSelector: '.bonus-amount' }, 76 | { 77 | wrapperSelector: '.precheck-block', 78 | priceSelector: '.precheck-block__total-text', 79 | bonusSelector: '.bonus-amount', 80 | }, 81 | ]; 82 | const c = e => { 83 | const o = (0, t)[e]; 84 | return location.pathname.startsWith(o); 85 | }; 86 | const a = (e, t = 1e4) => { 87 | return new Promise((o, r) => { 88 | try { 89 | setTimeout(() => { 90 | o(null); 91 | }, t); 92 | let r; 93 | const n = () => { 94 | const t = document.querySelector(e); 95 | if (t) { 96 | clearTimeout(r); 97 | o(t); 98 | } else r = setTimeout(n, 100); 99 | }; 100 | n(); 101 | } catch (e) { 102 | r(e); 103 | } 104 | }); 105 | }; 106 | const s = e => { 107 | return (...t) => { 108 | e; 109 | }; 110 | }; 111 | const i = e => { 112 | return e ? +e.replace(/[^0-9.-]+/g, '') : 0; 113 | }; 114 | const l = e => { 115 | return new Promise(t => setTimeout(() => t(), e)); 116 | }; 117 | const u = (e, t = {}, o = [], r = null) => { 118 | const n = document.createElement(e); 119 | if (typeof t === 'object') for (const e in t) n.setAttribute(e, t[e]); 120 | if (Array.isArray(o)) 121 | o.forEach(e => { 122 | n.appendChild(typeof e === 'string' ? document.createTextNode(e) : e); 123 | }); 124 | if (r) r.appendChild(n); 125 | return n; 126 | }; 127 | const p = (e, t) => { 128 | let o; 129 | return function (...r) { 130 | return new Promise(n => { 131 | clearTimeout(o); 132 | o = setTimeout(() => { 133 | o = null; 134 | Promise.resolve(e.apply(this, [...r])).then(n); 135 | }, t); 136 | }); 137 | }; 138 | }; 139 | const d = async e => { 140 | await GM.setValue((0, r).CURRENT_PAGE_URL_KEY, window.location.href); 141 | const t = async () => { 142 | const t = await GM.getValue((0, r).CURRENT_PAGE_URL_KEY); 143 | const o = window.location.href; 144 | if (t !== o) { 145 | await GM.setValue((0, r).CURRENT_PAGE_URL_KEY, o); 146 | e(); 147 | } 148 | }; 149 | const o = (0, p)(t, 500); 150 | const n = new MutationObserver(o); 151 | n.observe(document.body, { childList: true, subtree: true }); 152 | }; 153 | var m = {}; 154 | m = 155 | '.mrp-button,.mrp-toggle{cursor:pointer;border-radius:4px;justify-content:center;align-items:center;gap:8px;padding:6px 12px;font-size:14px;transition:all .3s ease-out;display:flex}.mrp-button svg{color:var(--pui-text-tertiary);transition:color .3s ease-out}.mrp-button:hover{background-color:#8654cc1a}.mrp-button:hover svg{color:var(--pui-button-primary)}@media screen and (max-width:968px){.mrp-button .text{display:none}}.r .sort-field .field{max-width:210px}.r .filter{margin-left:auto}.mrp-real-price.mrp-real-price.mrp-real-price{letter-spacing:normal;color:#e91e63;font-family:SB Sans Display,sans-serif;font-size:max(80%,16px);line-height:1.4}.mrp-toolbar{gap:16px;margin:0 24px;display:flex}@media screen and (max-width:1200px){.mrp-toolbar{margin-top:-8px;margin-bottom:-8px}}.mrp-toggle{position:relative}.mrp-toggle input,.mrp-toggle input:active{opacity:0;border:0;outline:none;width:0;height:0;position:absolute;left:-5000px}.mrp-toggle .icon{background:#f8f8f8;border:.2em solid #ddd;border-radius:1.6em;width:5.3em;height:3.2em;padding:1em;font-size:7px;transition:all .3s ease-out;display:block;position:relative}.mrp-toggle .icon:before{content:"";text-indent:4em;z-index:2;background:#fff;border-radius:1.4em;width:2.8em;height:2.8em;transition:all .25s ease-in-out;display:block;position:absolute;top:0;left:0;right:auto;box-shadow:0 .3em .3em #0003,0 0 0 .1em #ddd}.mrp-toggle .icon:after{content:"";z-index:1;background:#f8f8f8;border-radius:1.4em;width:2.8em;height:100%;transition:all .25s ease-in-out;display:block;position:absolute;top:0;left:0}.mrp-toggle input:active+.icon:before{width:3.2em}.mrp-toggle input:checked+.icon{border-color:var(--pui-button-primary);box-shadow:inset 0 0 0 2em var(--pui-button-primary)}.mrp-toggle input:checked+.icon:after{background-color:var(--pui-button-primary);width:100%;right:1.4em}.mrp-toggle input:checked+.icon:before{left:calc(100% - 2.8em);box-shadow:0 0 0 .1em #0000,0 .3em .3em #0000004d}.mrp-toggle input:checked:active+.icon:before{left:calc(100% - 3.2em)}@media screen and (max-width:968px){.mrp-toggle .text{display:none}}'; 156 | const E = () => { 157 | document.head.insertAdjacentHTML('beforeend', ``); 158 | }; 159 | const S = false; 160 | const g = (0, s)(S); 161 | const T = new Intl.NumberFormat('ru-RU', { style: 'currency', currency: 'RUB', maximumFractionDigits: 0 }); 162 | const h = e => { 163 | const { 164 | wrapperEl: t, 165 | priceSelector: o = '.item-price', 166 | bonusSelector: n = '.bonus-amount', 167 | realPriceClassName: c, 168 | } = e; 169 | S; 170 | g('---- wrapperEl', t); 171 | const a = t.querySelector(o); 172 | const s = t.querySelector(n); 173 | const l = t.querySelector(`.${c}`); 174 | g('---- priceEl', o, a); 175 | g('---- bonusEl', n, s); 176 | g('---- realPriceEl', l); 177 | if (!a || !s) { 178 | g('setRealPrice cancel'); 179 | S; 180 | return; 181 | } 182 | const p = (0, i)(a.firstChild.textContent.trim()); 183 | const d = (0, i)(s.firstChild.textContent.trim()); 184 | g('---- priceValue', p); 185 | g('---- bonusValue', d); 186 | const m = +p - +d; 187 | g('---- newPriceValue', m); 188 | const E = ` (${T.format(m)})`; 189 | g('---- newPriceFormatted', E); 190 | if (l) { 191 | l.textContent = E; 192 | g('---- realPriceEl', l); 193 | } else { 194 | const e = a.closest((0, r).PRODUCT_SELECTOR)?.id; 195 | const t = (0, u)('span', { class: c, 'data-parent-id': e }, [E]); 196 | g('---- newPriceEl', t); 197 | a.append(t); 198 | } 199 | g('setRealPrice end'); 200 | S; 201 | }; 202 | const R = async () => { 203 | S; 204 | (0, n).forEach(({ wrapperSelector: e, priceSelector: t, bonusSelector: o }) => { 205 | const n = document.querySelectorAll(e); 206 | S; 207 | n.forEach(e => { 208 | h({ wrapperEl: e, priceSelector: t, bonusSelector: o, realPriceClassName: (0, r).REAL_PRICE_CLASSNAME }); 209 | }); 210 | }); 211 | S; 212 | }; 213 | const f = async () => { 214 | await R(); 215 | }; 216 | class y { 217 | constructor({ pageType: e, pageReadyElementSelector: t, onPreparePage: o, onRun: r }) { 218 | this.run = async () => { 219 | try { 220 | const e = await (0, a)(this._pageReadyElementSelector); 221 | await this.onPreparePage?.(); 222 | await this.onRun(); 223 | } catch (e) {} 224 | }; 225 | this._pageType = e; 226 | this._pageReadyElementSelector = t; 227 | this.onPreparePage = o; 228 | this.onRun = r; 229 | } 230 | } 231 | const b = async () => { 232 | const e = document.querySelector((0, r).BASKET_TOTAL_PRICE_SELECTOR); 233 | const t = new MutationObserver(([e]) => { 234 | const t = e.target.textContent.trim(); 235 | if (e.oldValue !== t) (0, f)(); 236 | }); 237 | t.observe(e, { 238 | characterData: true, 239 | attributes: false, 240 | childList: false, 241 | subtree: true, 242 | characterDataOldValue: true, 243 | }); 244 | }; 245 | const C = async () => { 246 | (0, f)(); 247 | }; 248 | const _ = new (0, y)({ pageType: (0, e).BASKET, pageReadyElementSelector: (0, o).BASKET, onPreparePage: b, onRun: C }); 249 | const O = false; 250 | const A = (0, s)(O); 251 | const w = e => { 252 | if (!e) return; 253 | const t = e.querySelector(`.${(0, r).REAL_PRICE_CLASSNAME}`)?.textContent; 254 | const o = e.querySelector((0, r).PRODUCT_PRICE_SELECTOR)?.textContent; 255 | const n = (0, i)(t || o); 256 | A('realPrice', t); 257 | A('price', o); 258 | A('resultPrice', n); 259 | return n; 260 | }; 261 | const P = (e, t) => { 262 | A('sort a', e); 263 | A('sort b', t); 264 | if (!e.hasAttribute('data-product-id')) return 1; 265 | if (!t.hasAttribute('data-product-id')) return -1; 266 | const o = w(e); 267 | const r = w(t); 268 | return o - r; 269 | }; 270 | const L = () => { 271 | const e = document.querySelector((0, r).PRODUCT_SELECTOR); 272 | if (!e) return; 273 | const t = e.parentElement; 274 | Array.from(t.children) 275 | .sort(P) 276 | .forEach(e => t.append(e)); 277 | }; 278 | const x = async e => { 279 | const t = e.target.checked; 280 | if (t) L(); 281 | await GM.setValue((0, r).SORT_TOGGLE_KEY, t); 282 | }; 283 | const v = async () => { 284 | const e = await GM.getValue((0, r).SORT_TOGGLE_KEY); 285 | if (e) L(); 286 | }; 287 | let k = ''; 288 | const M = async e => { 289 | const t = document.querySelector((0, r).PRODUCT_SELECTOR); 290 | if (!t) return; 291 | if (k !== t.id) { 292 | k = t.id; 293 | e(); 294 | } 295 | }; 296 | const U = (0, p)(M, 300); 297 | const G = async (e, t) => { 298 | try { 299 | k = ''; 300 | const o = new MutationObserver(async () => { 301 | U(t); 302 | }); 303 | o.observe(e, { childList: true, subtree: true }); 304 | return o; 305 | } catch (e) {} 306 | }; 307 | const I = ({ text: e, attrs: t, icon: o, onClick: r }) => { 308 | const n = e ? [(0, u)('span', { class: 'text' }, [e])] : []; 309 | const c = (0, u)('button', { class: 'mrp-button', ...t }, n); 310 | if (o) c.insertAdjacentHTML('afterbegin', o); 311 | if (r) c.addEventListener('click', r); 312 | return c; 313 | }; 314 | const K = 315 | ''; 316 | const N = 317 | ''; 318 | const V = ({ text: e, attrs: t, checked: o, onChange: r }) => { 319 | const n = o ? { type: 'checkbox', checked: o } : { type: 'checkbox' }; 320 | const c = (0, u)('input', n); 321 | const a = (0, u)('span', { class: 'icon' }); 322 | const s = (0, u)('span', { class: 'text' }, [e]); 323 | const i = (0, u)('label', { class: 'mrp-toggle', ...t }, [c, a, s]); 324 | if (r) c.addEventListener('change', r); 325 | return i; 326 | }; 327 | let D = null; 328 | const q = () => { 329 | const e = document.querySelector((0, r).CATALOG_FILTER_SELECTOR); 330 | const t = (0, u)('div', { class: (0, r).MRP_TOOLBAR_CLASSNAME }, []); 331 | e.before(t); 332 | }; 333 | const F = async () => { 334 | try { 335 | const e = document.querySelector(`.${(0, r).MRP_TOOLBAR_CLASSNAME}`); 336 | const t = await GM.getValue((0, r).SORT_TOGGLE_KEY); 337 | const o = (0, V)({ 338 | checked: t, 339 | text: 'Автосортировка', 340 | attrs: { title: 'Вкл/Выкл автоматической сортировки по "красным" ценникам' }, 341 | onChange: (0, x), 342 | }); 343 | const n = (0, I)({ 344 | text: 'Ручная сортировка', 345 | attrs: { title: 'Ручная сортировка по "красным" ценникам' }, 346 | icon: (0, K), 347 | onClick: (0, L), 348 | }); 349 | const c = (0, I)({ 350 | text: 'Пересчет цен', 351 | attrs: { title: 'Ручной запуск подсчета цен с учетом бонусов' }, 352 | icon: (0, N), 353 | onClick: (0, f), 354 | }); 355 | e.append(o, n, c); 356 | } catch (e) {} 357 | }; 358 | const B = async () => { 359 | await (0, f)(); 360 | await (0, v)(); 361 | }; 362 | const H = async () => { 363 | const e = document.querySelector((0, r).CATALOG_WRAPPER_SELECTOR); 364 | const t = document.querySelector((0, r).CATALOG_FILTER_SELECTOR); 365 | const o = document.querySelector(`.${(0, r).MRP_TOOLBAR_CLASSNAME}`); 366 | if (e && !D) D = (0, G)(e, B); 367 | if (t && !o) { 368 | q(); 369 | F(); 370 | } 371 | }; 372 | const Y = async () => { 373 | try { 374 | const e = document.querySelector((0, r).CATALOG_WRAPPER_SELECTOR); 375 | await (0, f)(); 376 | if (e) await (0, v)(); 377 | } catch (e) {} 378 | }; 379 | const j = new (0, y)({ pageType: (0, e).COMMON, pageReadyElementSelector: (0, o).COMMON, onPreparePage: H, onRun: Y }); 380 | const z = (0, p)((0, f), 300); 381 | const W = async () => { 382 | const e = document.querySelector((0, o).CHECKOUT); 383 | const t = new MutationObserver(z); 384 | t.observe(e, { childList: true, subtree: true }); 385 | }; 386 | const $ = async () => { 387 | (0, f)(); 388 | }; 389 | const Z = new (0, y)({ 390 | pageType: (0, e).CHECKOUT, 391 | pageReadyElementSelector: (0, o).CHECKOUT, 392 | onPreparePage: W, 393 | onRun: $, 394 | }); 395 | let J = null; 396 | const Q = async () => { 397 | const e = document.querySelector((0, r).FAVORITES_CATALOG_WRAPPER_SELECTOR); 398 | if (e && !J) J = (0, G)(e, (0, f)); 399 | }; 400 | const X = async () => { 401 | (0, f)(); 402 | }; 403 | const ee = new (0, y)({ 404 | pageType: (0, e).FAVORITES, 405 | pageReadyElementSelector: (0, o).FAVORITES, 406 | onPreparePage: Q, 407 | onRun: X, 408 | }); 409 | const et = (0, p)((0, f), 300); 410 | const eo = async () => { 411 | const e = document.querySelector((0, r).PRODUCT_OFFERS_SECTIONS); 412 | if (!e) return; 413 | const t = new MutationObserver(et); 414 | t.observe(e, { childList: true, subtree: true }); 415 | }; 416 | const er = async () => { 417 | (0, f)(); 418 | }; 419 | const en = new (0, y)({ 420 | pageType: (0, e).PRODUCT, 421 | pageReadyElementSelector: (0, o).PRODUCT, 422 | onPreparePage: eo, 423 | onRun: er, 424 | }); 425 | const ec = [(0, en)]; 426 | const ea = () => { 427 | if ((0, c)((0, e).PRODUCT)) return 0, en; 428 | if ((0, c)((0, e).CHECKOUT)) return 0, Z; 429 | if ((0, c)((0, e).BASKET)) return 0, _; 430 | if ((0, c)((0, e).FAVORITES)) return 0, ee; 431 | return 0, j; 432 | }; 433 | const es = async () => { 434 | const e = ea(); 435 | e.run(); 436 | }; 437 | const ei = e => { 438 | document.onvisibilitychange = () => { 439 | if (document.visibilityState === 'visible') e(); 440 | }; 441 | }; 442 | const el = () => { 443 | (0, E)(); 444 | (0, es)(); 445 | (0, d)((0, es)); 446 | ei((0, es)); 447 | }; 448 | try { 449 | window.onload = () => { 450 | setTimeout(el, (0, r).INIT_DELAY); 451 | }; 452 | } catch (e) {} 453 | -------------------------------------------------------------------------------- /mrp-script.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mrp", 3 | "description": "Megamarket real price", 4 | "version": "2.0.7", 5 | "license": "MIT", 6 | "author": "undfndusr", 7 | "source": "src/index.ts", 8 | "main": "build/mrp.user.js", 9 | "targets": { 10 | "main": { 11 | "sourceMap": false, 12 | "optimize": true 13 | } 14 | }, 15 | "scripts": { 16 | "start": "parcel watch", 17 | "build": "parcel build" 18 | }, 19 | "devDependencies": { 20 | "@babel/core": "^7.12.0", 21 | "@parcel/optimizer-terser": "^2.10.3", 22 | "@parcel/transformer-inline-string": "^2.10.3", 23 | "@parcel/transformer-less": "2.10.3", 24 | "@types/tampermonkey": "^5.0.2", 25 | "babel-plugin-transform-remove-console": "^6.9.4", 26 | "parcel": "^2.10.3" 27 | }, 28 | "browserslist": "> 0.5%, last 2 versions, not dead" 29 | } 30 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # MRP Script 2 | 3 | Скрипт для Мегамаркета, добавляющий на страницы ценники с учетом бонусов, а также возможность сортировки по ним. 4 | 5 | ## Установка 6 | 7 | 1. Установите одно из расширений для вашего браузера: 8 | - Tampermonkey: [Chrome](https://chromewebstore.google.com/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=ru) | [Mozilla](https://addons.mozilla.org/ru/firefox/addon/tampermonkey/) 9 | - Violentmonkey: [Chrome](https://chromewebstore.google.com/detail/violentmonkey/jinjaccalgkegednnccohejagnlnfdag) | [Mozilla](https://addons.mozilla.org/ru/firefox/addon/violentmonkey/) 10 | - Greasemonkey: [Mozilla](https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/) 11 | - Userscripts: [Safari](https://github.com/quoid/userscripts) 12 | 2. Откройте страницу скрипта - [mrp.user.js](https://github.com/undfndusr/mrp/raw/master/build/mrp.user.js) 13 | 3. Установите скрипт (в случае Сафари следуйте инструкции, приведенной на странице расширения Userscripts) 14 | 15 | ## Использование 16 | 17 | На всех страницах мегамаркета скрипт автоматически встраивает ценники для товаров, за которые начисляют бонусы. 18 | ![](https://i.imgur.com/vTmkjZU.jpg) 19 | 20 | На страницах каталога дополнительно встраиваются кнопки для управления сортировкой по высчитанным ценникам. 21 | ![](https://i.imgur.com/JPuGiFS.jpg) 22 | -------------------------------------------------------------------------------- /src/components/button.ts: -------------------------------------------------------------------------------- 1 | import { cn } from '../utils'; 2 | 3 | interface Props { 4 | text?: string; 5 | attrs: Record; 6 | icon?: string; 7 | onClick?: () => void; 8 | } 9 | 10 | export const createButton = ({ text, attrs, icon, onClick }: Props): HTMLElement => { 11 | const children = text ? [cn('span', { class: 'text' }, [text])] : []; 12 | const button = cn('button', { class: 'mrp-button', ...attrs }, children); 13 | 14 | if (icon) { 15 | button.insertAdjacentHTML('afterbegin', icon); 16 | } 17 | 18 | if (onClick) { 19 | button.addEventListener('click', onClick); 20 | } 21 | 22 | return button; 23 | }; 24 | -------------------------------------------------------------------------------- /src/components/calcPrices.ts: -------------------------------------------------------------------------------- 1 | import { cn, createLogger, digitsOnly } from '../utils'; 2 | import { PARAMS, sectionsWithPriceElements } from '../constants'; 3 | 4 | const debug = false; 5 | const log = createLogger(debug); 6 | 7 | const priceFormatter = new Intl.NumberFormat('ru-RU', { 8 | style: 'currency', 9 | currency: 'RUB', 10 | maximumFractionDigits: 0, 11 | }); 12 | 13 | const setRealPrice = params => { 14 | const { wrapperEl, priceSelector = '.item-price', bonusSelector = '.bonus-amount', realPriceClassName } = params; 15 | 16 | debug && console.groupCollapsed('setRealPrice start'); 17 | log('---- wrapperEl', wrapperEl); 18 | 19 | const priceEl = wrapperEl.querySelector(priceSelector); 20 | const bonusEl = wrapperEl.querySelector(bonusSelector); 21 | const realPriceEl = wrapperEl.querySelector(`.${realPriceClassName}`); 22 | 23 | log('---- priceEl', priceSelector, priceEl); 24 | log('---- bonusEl', bonusSelector, bonusEl); 25 | log('---- realPriceEl', realPriceEl); 26 | 27 | if (!priceEl || !bonusEl) { 28 | log('setRealPrice cancel'); 29 | debug && console.groupEnd(); 30 | return; 31 | } 32 | 33 | const priceValue = digitsOnly(priceEl.firstChild.textContent.trim()); 34 | const bonusValue = digitsOnly(bonusEl.firstChild.textContent.trim()); 35 | 36 | log('---- priceValue', priceValue); 37 | log('---- bonusValue', bonusValue); 38 | 39 | const newPriceValue = +priceValue - +bonusValue; 40 | log('---- newPriceValue', newPriceValue); 41 | 42 | const newPriceFormatted = ` (${priceFormatter.format(newPriceValue)})`; 43 | log('---- newPriceFormatted', newPriceFormatted); 44 | 45 | if (realPriceEl) { 46 | realPriceEl.textContent = newPriceFormatted; 47 | log('---- realPriceEl', realPriceEl); 48 | } else { 49 | const parentId = priceEl.closest(PARAMS.PRODUCT_SELECTOR)?.id; 50 | const newPriceEl = cn('span', { class: realPriceClassName, 'data-parent-id': parentId }, [newPriceFormatted]); 51 | log('---- newPriceEl', newPriceEl); 52 | priceEl.append(newPriceEl); 53 | } 54 | 55 | log('setRealPrice end'); 56 | debug && console.groupEnd(); 57 | }; 58 | 59 | const calcPrices = async (): Promise => { 60 | debug && console.log('calcPrices start'); 61 | 62 | sectionsWithPriceElements.forEach(({ wrapperSelector, priceSelector, bonusSelector }) => { 63 | const wrappers = document.querySelectorAll(wrapperSelector); 64 | 65 | debug && console.log('calcPrices wrappers', wrappers); 66 | 67 | wrappers.forEach(wrapperEl => { 68 | setRealPrice({ 69 | wrapperEl, 70 | priceSelector, 71 | bonusSelector, 72 | realPriceClassName: PARAMS.REAL_PRICE_CLASSNAME, 73 | }); 74 | }); 75 | }); 76 | 77 | debug && console.log('calcPrices end'); 78 | }; 79 | 80 | export const runCalcPrices = async (): Promise => { 81 | await calcPrices(); 82 | }; 83 | -------------------------------------------------------------------------------- /src/components/catalogObserver.ts: -------------------------------------------------------------------------------- 1 | import { PARAMS } from '../constants'; 2 | import { debounce } from '../utils'; 3 | 4 | let firstProductId = ''; 5 | 6 | const mutationObserverCb = async (onChange: () => void): Promise => { 7 | const firstProductEl = document.querySelector(PARAMS.PRODUCT_SELECTOR); 8 | 9 | if (!firstProductEl) { 10 | return; 11 | } 12 | 13 | console.log(`CatalogObserver debounced. Values: ${firstProductId} -> ${firstProductEl.id}`); 14 | 15 | if (firstProductId !== firstProductEl.id) { 16 | firstProductId = firstProductEl.id; 17 | onChange(); 18 | } 19 | }; 20 | 21 | const debouncedMutationObserverCb = debounce(mutationObserverCb, 300); 22 | 23 | // Следит за изменением id первого товара в каталоге 24 | export const catalogObserver = async (catalogWrapper: Element, onChange: () => void): Promise => { 25 | console.log('CatalogObserver was run'); 26 | 27 | try { 28 | // Обнуляем при старте 29 | firstProductId = ''; 30 | 31 | const observer = new MutationObserver(async (): Promise => { 32 | console.log('CatalogObserver run'); 33 | 34 | debouncedMutationObserverCb(onChange); 35 | }); 36 | 37 | observer.observe(catalogWrapper, { 38 | childList: true, 39 | subtree: true, 40 | }); 41 | } catch (e) { 42 | console.log('MRP.catalogObserver: ', e); 43 | } 44 | }; 45 | -------------------------------------------------------------------------------- /src/components/router.ts: -------------------------------------------------------------------------------- 1 | import { basketPage } from '../pages/basket'; 2 | import { commonPage } from '../pages/common'; 3 | import { checkoutPage } from '../pages/checkout'; 4 | import { favoritesPage } from '../pages/favorites'; 5 | import { productPage } from '../pages/product'; 6 | import { PageType } from '../constants'; 7 | import { isPage } from '../utils'; 8 | 9 | export const router = async (): Promise => { 10 | if (isPage(PageType.PRODUCT)) { 11 | productPage.run(); 12 | return; 13 | } 14 | 15 | if (isPage(PageType.CHECKOUT)) { 16 | checkoutPage.run(); 17 | return; 18 | } 19 | 20 | if (isPage(PageType.BASKET)) { 21 | basketPage.run(); 22 | return; 23 | } 24 | 25 | if (isPage(PageType.FAVORITES)) { 26 | favoritesPage.run(); 27 | return; 28 | } 29 | 30 | commonPage.run(); 31 | }; 32 | -------------------------------------------------------------------------------- /src/components/sortProducts.ts: -------------------------------------------------------------------------------- 1 | import { cn, createLogger, digitsOnly } from '../utils'; 2 | import { PARAMS } from '../constants'; 3 | import { sortIcon } from '../icons'; 4 | 5 | const debug = false; 6 | const log = createLogger(debug); 7 | 8 | const getPriceFromProduct = product => { 9 | if (!product) { 10 | return; 11 | } 12 | 13 | const realPrice = product.querySelector(`.${PARAMS.REAL_PRICE_CLASSNAME}`)?.textContent; 14 | const price = product.querySelector(PARAMS.PRODUCT_PRICE_SELECTOR)?.textContent; 15 | const resultPrice = digitsOnly(realPrice || price); 16 | 17 | log('realPrice', realPrice); 18 | log('price', price); 19 | log('resultPrice', resultPrice); 20 | 21 | return resultPrice; 22 | }; 23 | 24 | const sortFn = (a: Element, b: Element): number => { 25 | log('sort a', a); 26 | log('sort b', b); 27 | 28 | if (!a.hasAttribute('data-product-id')) { 29 | return 1; 30 | } 31 | 32 | if (!b.hasAttribute('data-product-id')) { 33 | return -1; 34 | } 35 | 36 | const aPrice = getPriceFromProduct(a); 37 | const bPrice = getPriceFromProduct(b); 38 | 39 | return aPrice - bPrice; 40 | }; 41 | 42 | export const manualSortProducts = () => { 43 | console.log('manualSortProducts'); 44 | 45 | const firstProduct = document.querySelector(PARAMS.PRODUCT_SELECTOR); 46 | 47 | if (!firstProduct) { 48 | return; 49 | } 50 | 51 | const currentOrderedCatalog = firstProduct.parentElement; 52 | 53 | Array.from(currentOrderedCatalog.children) 54 | .sort(sortFn) 55 | .forEach(node => currentOrderedCatalog.append(node)); 56 | }; 57 | 58 | export const handleChangeSortToggle = async (event: HtmlInputEvent): Promise => { 59 | const checked = event.target.checked; 60 | 61 | if (checked) { 62 | manualSortProducts(); 63 | } 64 | 65 | await GM.setValue(PARAMS.SORT_TOGGLE_KEY, checked); 66 | }; 67 | 68 | export const runAutoSortProducts = async (): Promise => { 69 | const checked = await GM.getValue(PARAMS.SORT_TOGGLE_KEY); 70 | 71 | if (checked) { 72 | manualSortProducts(); 73 | } 74 | }; 75 | -------------------------------------------------------------------------------- /src/components/stylesInjector.ts: -------------------------------------------------------------------------------- 1 | import * as styles from 'bundle-text:../styles/index.less'; 2 | 3 | export const injectStyles = () => { 4 | document.head.insertAdjacentHTML('beforeend', ``); 5 | }; 6 | -------------------------------------------------------------------------------- /src/components/toggle.ts: -------------------------------------------------------------------------------- 1 | import { cn } from '../utils'; 2 | 3 | interface Props { 4 | text?: string; 5 | attrs: Record; 6 | checked?: boolean; 7 | onChange?: (event: HtmlInputEvent) => void; 8 | } 9 | 10 | export const createToggle = ({ text, attrs, checked, onChange }: Props): HTMLElement => { 11 | const inputAttrs = checked ? { type: 'checkbox', checked } : { type: 'checkbox' }; 12 | const input = cn('input', inputAttrs); 13 | const icon = cn('span', { class: 'icon' }); 14 | const textElement = cn('span', { class: 'text' }, [text]); 15 | const label = cn('label', { class: 'mrp-toggle', ...attrs }, [input, icon, textElement]); 16 | 17 | if (onChange) { 18 | input.addEventListener('change', onChange); 19 | } 20 | 21 | return label; 22 | }; 23 | -------------------------------------------------------------------------------- /src/components/urlObserver.ts: -------------------------------------------------------------------------------- 1 | import { debounce } from '../utils'; 2 | import { PARAMS } from '../constants'; 3 | 4 | export const observeUrlChange = async (onChange: () => void): Promise => { 5 | await GM.setValue(PARAMS.CURRENT_PAGE_URL_KEY, window.location.href); 6 | 7 | const onChangeHandler = async () => { 8 | const oldHref = await GM.getValue(PARAMS.CURRENT_PAGE_URL_KEY); 9 | const newHref = window.location.href; 10 | 11 | if (oldHref !== newHref) { 12 | console.log('MRP.observeUrlChange'); 13 | 14 | await GM.setValue(PARAMS.CURRENT_PAGE_URL_KEY, newHref); 15 | onChange(); 16 | } 17 | }; 18 | 19 | const debouncedOnChangeHandler = debounce(onChangeHandler, 500); 20 | 21 | const observer = new MutationObserver(debouncedOnChangeHandler); 22 | 23 | observer.observe(document.body, { 24 | childList: true, 25 | subtree: true, 26 | }); 27 | }; 28 | -------------------------------------------------------------------------------- /src/constants.ts: -------------------------------------------------------------------------------- 1 | export enum PageType { 2 | 'BASKET' = 'BASKET', // Корзина 3 | 'CHECKOUT' = 'CHECKOUT', // Корзина. Оформление 4 | 'COMMON' = 'COMMON', // Страница каталога и все остальные 5 | 'PRODUCT' = 'PRODUCT', // Страница с товаром 6 | 'FAVORITES' = 'FAVORITES', // Избранное 7 | } 8 | 9 | export const urlPathByPage = { 10 | [PageType.BASKET]: '/multicart/', 11 | [PageType.CHECKOUT]: '/multicart/checkout/', 12 | [PageType.PRODUCT]: '/catalog/details/', 13 | [PageType.FAVORITES]: '/personal/favorites/', 14 | }; 15 | 16 | // Элементы, по наличию которых можно понять, что данные на странице подгрузились 17 | export const PAGE_READY_ELEMENT_SELECTOR: Record = { 18 | [PageType.BASKET]: '.multicart-item__summary', 19 | [PageType.CHECKOUT]: '.precheck-block', 20 | [PageType.COMMON]: '[data-product-id]', 21 | [PageType.FAVORITES]: '[data-product-id]', 22 | [PageType.PRODUCT]: '.pdp-sales-block .bonus-amount', 23 | }; 24 | 25 | export const PARAMS = { 26 | INIT_DELAY: 2000, // Начальная задержка перед стартом, чтобы дождаться завершения всяких анимаций и прочего 27 | REAL_PRICE_CLASSNAME: 'mrp-real-price', 28 | MRP_TOOLBAR_CLASSNAME: 'mrp-toolbar', 29 | CATALOG_WRAPPER_SELECTOR: '.r', 30 | CATALOG_FILTER_SELECTOR: '.r .filter', 31 | BASKET_TOTAL_PRICE_SELECTOR: '[class*="__total-price-value"]', 32 | PRODUCT_SELECTOR: '[id][data-product-id]', 33 | PRODUCT_PRICE_SELECTOR: '.item-price', 34 | PRODUCT_OFFERS_SECTIONS: '.product-offers', 35 | FAVORITES_CATALOG_WRAPPER_SELECTOR: '.personal-listing__container', 36 | SORT_TOGGLE_KEY: 'sortToggle', 37 | CURRENT_PAGE_URL_KEY: 'currentPageUrl', 38 | }; 39 | 40 | // Все разделы, содержащие цены (со всех страниц) 41 | // Держим в одном месте, т.к. одни и те же разделы могут встречаться на разных страницах 42 | export const sectionsWithPriceElements = [ 43 | // Страница товара. Основной блок с ценой 44 | { 45 | wrapperSelector: '.pdp-sales-block', 46 | priceSelector: '[class*="__price-final"]', 47 | bonusSelector: '.bonus-amount', 48 | }, 49 | // Страница товара. Блоки "Похожие товары" + "Рекомендуем также" 50 | { 51 | wrapperSelector: '.product-list-item-price__money', 52 | priceSelector: '.amount', 53 | bonusSelector: '.bonus-amount', 54 | }, 55 | // Страница товара. Блок "Цены" 56 | { 57 | wrapperSelector: '.product-offer-price', 58 | priceSelector: '.product-offer-price__amount', 59 | bonusSelector: '.bonus-amount', 60 | }, 61 | // Страница товара. Блок "Вы недавно смотрели" 62 | { 63 | wrapperSelector: '.goods-item-card__money', 64 | priceSelector: '.goods-item-card__amount', 65 | bonusSelector: '.bonus-amount', 66 | }, 67 | // Страница каталога. Цены товаров 68 | { 69 | wrapperSelector: '.catalog-item-regular-desktop__price-block', 70 | priceSelector: '.catalog-item-regular-desktop__price', 71 | bonusSelector: '.bonus-amount', 72 | }, 73 | // Корзина. Финальная цена 74 | { 75 | wrapperSelector: '.multicart-item__summary', 76 | priceSelector: '.cart-summary-redesign__total-price-value', 77 | bonusSelector: '.bonus-amount', 78 | }, 79 | // Корзина. Товары 80 | { 81 | wrapperSelector: '.cart-item-price', 82 | priceSelector: '.price', 83 | bonusSelector: '.bonus-amount', 84 | }, 85 | // Корзина. Оформление 86 | { 87 | wrapperSelector: '.precheck-block', 88 | priceSelector: '.precheck-block__total-text', 89 | bonusSelector: '.bonus-amount', 90 | }, 91 | ]; 92 | -------------------------------------------------------------------------------- /src/global.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'bundle-text:*' { 2 | const value: string; 3 | export default value; 4 | } 5 | 6 | declare interface HtmlInputEvent extends Event { 7 | target: HTMLInputElement & EventTarget; 8 | } 9 | -------------------------------------------------------------------------------- /src/icons.ts: -------------------------------------------------------------------------------- 1 | export const sortIcon = 2 | ''; 3 | export const refreshPriceIcon = 4 | ''; 5 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { observeUrlChange } from './components/urlObserver'; 2 | import { injectStyles } from './components/stylesInjector'; 3 | import { router } from './components/router'; 4 | import { PARAMS } from './constants'; 5 | import pkg from '../package.json'; 6 | 7 | const observeVisibilityChange = (onChange: () => void) => { 8 | document.onvisibilitychange = () => { 9 | if (document.visibilityState === 'visible') { 10 | onChange(); 11 | } 12 | }; 13 | }; 14 | 15 | const init = () => { 16 | console.log(`MRP v${pkg.version} init`); 17 | 18 | injectStyles(); 19 | 20 | router(); // Стартовый запуск 21 | observeUrlChange(router); // Запуск при изменении урла 22 | 23 | // Дополнительно запускаем скрипт при переходе на вкладку 24 | // (для страниц, открытых в новой вкладке или выгруженных из памяти браузером) 25 | observeVisibilityChange(router); 26 | }; 27 | 28 | try { 29 | window.onload = () => { 30 | console.clear(); 31 | setTimeout(init, PARAMS.INIT_DELAY); 32 | }; 33 | } catch (e) { 34 | console.log('MRP error:', e); 35 | } 36 | -------------------------------------------------------------------------------- /src/pages/basket.ts: -------------------------------------------------------------------------------- 1 | import { runCalcPrices } from '../components/calcPrices'; 2 | import { PAGE_READY_ELEMENT_SELECTOR, PageType, PARAMS } from '../constants'; 3 | import { Page } from './page'; 4 | 5 | const preparePage = async (): Promise => { 6 | const totalPriceEl = document.querySelector(PARAMS.BASKET_TOTAL_PRICE_SELECTOR); 7 | 8 | // Следим за изменением итоговой цены корзины (вместо слежки за каждым товаром) 9 | const observer = new MutationObserver(([mutation]) => { 10 | const newValue = mutation.target.textContent.trim(); 11 | 12 | if (mutation.oldValue !== newValue) { 13 | runCalcPrices(); 14 | } 15 | }); 16 | 17 | observer.observe(totalPriceEl, { 18 | characterData: true, 19 | attributes: false, 20 | childList: false, 21 | subtree: true, 22 | characterDataOldValue: true, 23 | }); 24 | }; 25 | 26 | const run = async (): Promise => { 27 | runCalcPrices(); 28 | }; 29 | 30 | export const basketPage = new Page({ 31 | pageType: PageType.BASKET, 32 | pageReadyElementSelector: PAGE_READY_ELEMENT_SELECTOR.BASKET, 33 | onPreparePage: preparePage, 34 | onRun: run, 35 | }); 36 | -------------------------------------------------------------------------------- /src/pages/checkout.ts: -------------------------------------------------------------------------------- 1 | import { runCalcPrices } from '../components/calcPrices'; 2 | import { debounce } from '../utils'; 3 | import { PAGE_READY_ELEMENT_SELECTOR, PageType } from '../constants'; 4 | import { Page } from './page'; 5 | 6 | const debouncedCalcPrice = debounce(runCalcPrices, 300); 7 | 8 | const preparePage = async (): Promise => { 9 | const precheckBlock = document.querySelector(PAGE_READY_ELEMENT_SELECTOR.CHECKOUT); 10 | const observer = new MutationObserver(debouncedCalcPrice); 11 | 12 | // Следим за всем блоком, т.к. изменения итоговой цены и бонусов очень непредсказуемы 13 | observer.observe(precheckBlock, { 14 | childList: true, 15 | subtree: true, 16 | }); 17 | }; 18 | 19 | const run = async (): Promise => { 20 | runCalcPrices(); 21 | }; 22 | 23 | export const checkoutPage = new Page({ 24 | pageType: PageType.CHECKOUT, 25 | pageReadyElementSelector: PAGE_READY_ELEMENT_SELECTOR.CHECKOUT, 26 | onPreparePage: preparePage, 27 | onRun: run, 28 | }); 29 | -------------------------------------------------------------------------------- /src/pages/common.ts: -------------------------------------------------------------------------------- 1 | import { runCalcPrices } from '../components/calcPrices'; 2 | import { handleChangeSortToggle, runAutoSortProducts, manualSortProducts } from '../components/sortProducts'; 3 | import { PAGE_READY_ELEMENT_SELECTOR, PageType, PARAMS } from '../constants'; 4 | import { catalogObserver } from '../components/catalogObserver'; 5 | import { cn } from '../utils'; 6 | import { Page } from './page'; 7 | import { createButton } from '../components/button'; 8 | import { refreshPriceIcon, sortIcon } from '../icons'; 9 | import { createToggle } from '../components/toggle'; 10 | 11 | const injectToolbar = (): void => { 12 | const mmToolbarFilter = document.querySelector(PARAMS.CATALOG_FILTER_SELECTOR); 13 | const mrpToolbar = cn('div', { class: PARAMS.MRP_TOOLBAR_CLASSNAME }, []); 14 | mmToolbarFilter.before(mrpToolbar); 15 | }; 16 | 17 | const fillToolbar = async (): Promise => { 18 | try { 19 | const toolbar = document.querySelector(`.${PARAMS.MRP_TOOLBAR_CLASSNAME}`); 20 | const checked = await GM.getValue(PARAMS.SORT_TOGGLE_KEY); 21 | 22 | const autoSortToggle = createToggle({ 23 | checked, 24 | text: 'Автосортировка', 25 | attrs: { title: 'Вкл/Выкл автоматической сортировки по "красным" ценникам' }, 26 | onChange: handleChangeSortToggle, 27 | }); 28 | 29 | const manualSortButton = createButton({ 30 | text: 'Ручная сортировка', 31 | attrs: { title: 'Ручная сортировка по "красным" ценникам' }, 32 | icon: sortIcon, 33 | onClick: manualSortProducts, 34 | }); 35 | 36 | const calcPricesButton = createButton({ 37 | text: 'Пересчет цен', 38 | attrs: { title: 'Ручной запуск подсчета цен с учетом бонусов' }, 39 | icon: refreshPriceIcon, 40 | onClick: runCalcPrices, 41 | }); 42 | 43 | toolbar.append(autoSortToggle, manualSortButton, calcPricesButton); 44 | } catch (e) { 45 | console.log('MRP.sortProducts.fillToolbar: ', e); 46 | } 47 | }; 48 | 49 | const onCatalogChange = async (): Promise => { 50 | await runCalcPrices(); 51 | await runAutoSortProducts(); 52 | }; 53 | 54 | const preparePage = async (): Promise => { 55 | const catalogWrapper = document.querySelector(PARAMS.CATALOG_WRAPPER_SELECTOR); 56 | const catalogFilter = document.querySelector(PARAMS.CATALOG_FILTER_SELECTOR); 57 | const mrpToolbar = document.querySelector(`.${PARAMS.MRP_TOOLBAR_CLASSNAME}`); 58 | 59 | // Следим за изменениями в каталоге 60 | if (catalogWrapper) { 61 | catalogObserver(catalogWrapper, onCatalogChange); 62 | } 63 | 64 | // Добавляем наш тулбар на страницу 65 | if (catalogFilter && !mrpToolbar) { 66 | injectToolbar(); 67 | fillToolbar(); 68 | } 69 | }; 70 | 71 | const run = async (): Promise => { 72 | try { 73 | const catalogWrapper = document.querySelector(PARAMS.CATALOG_WRAPPER_SELECTOR); 74 | 75 | await runCalcPrices(); 76 | 77 | if (catalogWrapper) { 78 | await runAutoSortProducts(); 79 | } 80 | } catch (e) { 81 | console.log('MRP.commonPage.run', e); 82 | } 83 | }; 84 | 85 | export const commonPage = new Page({ 86 | pageType: PageType.COMMON, 87 | pageReadyElementSelector: PAGE_READY_ELEMENT_SELECTOR.COMMON, 88 | onPreparePage: preparePage, 89 | onRun: run, 90 | }); 91 | -------------------------------------------------------------------------------- /src/pages/favorites.ts: -------------------------------------------------------------------------------- 1 | import { Page } from './page'; 2 | import { PAGE_READY_ELEMENT_SELECTOR, PageType, PARAMS } from '../constants'; 3 | import { catalogObserver } from '../components/catalogObserver'; 4 | import { runCalcPrices } from '../components/calcPrices'; 5 | 6 | const preparePage = async (): Promise => { 7 | const catalogWrapper = document.querySelector(PARAMS.FAVORITES_CATALOG_WRAPPER_SELECTOR); 8 | 9 | if (catalogWrapper) { 10 | catalogObserver(catalogWrapper, runCalcPrices); 11 | } 12 | }; 13 | 14 | const run = async (): Promise => { 15 | runCalcPrices(); 16 | }; 17 | 18 | export const favoritesPage = new Page({ 19 | pageType: PageType.FAVORITES, 20 | pageReadyElementSelector: PAGE_READY_ELEMENT_SELECTOR.FAVORITES, 21 | onPreparePage: preparePage, 22 | onRun: run, 23 | }); 24 | -------------------------------------------------------------------------------- /src/pages/page.ts: -------------------------------------------------------------------------------- 1 | import { PageType } from '../constants'; 2 | import { getDomElementAsync } from '../utils'; 3 | 4 | type AsyncFn = () => Promise; 5 | 6 | type ConstructorArgs = { 7 | pageType: PageType; 8 | pageReadyElementSelector: string; 9 | onPreparePage?: AsyncFn; 10 | onRun: AsyncFn; 11 | }; 12 | 13 | export class Page { 14 | private _pageType: PageType; 15 | private _pageReadyElementSelector: string; 16 | 17 | private onPreparePage: AsyncFn; 18 | private onRun: AsyncFn; 19 | 20 | constructor({ pageType, pageReadyElementSelector, onPreparePage, onRun }: ConstructorArgs) { 21 | this._pageType = pageType; 22 | this._pageReadyElementSelector = pageReadyElementSelector; 23 | this.onPreparePage = onPreparePage; 24 | this.onRun = onRun; 25 | } 26 | 27 | public run = async () => { 28 | try { 29 | console.log(`${this._pageType} page init`); 30 | 31 | await getDomElementAsync(this._pageReadyElementSelector); 32 | 33 | await this.onPreparePage?.(); 34 | 35 | await this.onRun(); 36 | } catch (e) { 37 | console.log(`MRP.${this._pageType}.run: `, e); 38 | } 39 | }; 40 | } 41 | -------------------------------------------------------------------------------- /src/pages/product.ts: -------------------------------------------------------------------------------- 1 | import { runCalcPrices } from '../components/calcPrices'; 2 | import { debounce } from '../utils'; 3 | import { PAGE_READY_ELEMENT_SELECTOR, PageType, PARAMS } from '../constants'; 4 | import { Page } from './page'; 5 | 6 | const debouncedCalcPrices = debounce(runCalcPrices, 300); 7 | 8 | const preparePage = async (): Promise => { 9 | const offersSection = document.querySelector(PARAMS.PRODUCT_OFFERS_SECTIONS); 10 | if (!offersSection) { 11 | return; 12 | } 13 | 14 | // Дополнительно следим за секцией "Цены" 15 | const observer = new MutationObserver(debouncedCalcPrices); 16 | observer.observe(offersSection, { 17 | childList: true, 18 | subtree: true, 19 | }); 20 | }; 21 | 22 | const run = async (): Promise => { 23 | runCalcPrices(); 24 | }; 25 | 26 | export const productPage = new Page({ 27 | pageType: PageType.PRODUCT, 28 | pageReadyElementSelector: PAGE_READY_ELEMENT_SELECTOR.PRODUCT, 29 | onPreparePage: preparePage, 30 | onRun: run, 31 | }); 32 | -------------------------------------------------------------------------------- /src/styles/button.less: -------------------------------------------------------------------------------- 1 | // Кнопки 2 | .mrp-button { 3 | display: flex; 4 | align-items: center; 5 | justify-content: center; 6 | gap: 8px; 7 | padding: 6px 12px; 8 | border-radius: 4px; 9 | font-size: 14px; 10 | cursor: pointer; 11 | transition: all 0.3s ease-out; 12 | 13 | svg { 14 | color: var(--pui-text-tertiary); 15 | transition: color 0.3s ease-out; 16 | } 17 | 18 | &:hover { 19 | background-color: #8654cc1a; 20 | 21 | svg { 22 | color: var(--pui-button-primary); 23 | } 24 | } 25 | 26 | .text { 27 | @media screen and (max-width: 968px) { 28 | display: none; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/styles/catalog.less: -------------------------------------------------------------------------------- 1 | // Перебиваем стили каталога 2 | .r { 3 | .sort-field .field { 4 | max-width: 210px; 5 | } 6 | 7 | .filter { 8 | margin-left: auto; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/styles/index.less: -------------------------------------------------------------------------------- 1 | @import './button'; 2 | @import './catalog'; 3 | @import './price'; 4 | @import './toolbar'; 5 | @import './toggle'; 6 | -------------------------------------------------------------------------------- /src/styles/price.less: -------------------------------------------------------------------------------- 1 | // Стили ценников 2 | .mrp-real-price { 3 | &&& { 4 | font-family: SB Sans Display, sans-serif; 5 | font-size: max(80%, 16px); 6 | line-height: 1.4; 7 | letter-spacing: normal; 8 | color: #e91e63; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/styles/toggle.less: -------------------------------------------------------------------------------- 1 | // Переключатель 2 | .mrp-toggle { 3 | &:extend(.mrp-button); 4 | position: relative; 5 | 6 | input, 7 | input:active { 8 | border: 0; 9 | height: 0; 10 | opacity: 0; 11 | outline: none; 12 | position: absolute; 13 | left: -5000px; 14 | width: 0; 15 | } 16 | 17 | .icon { 18 | background: #f8f8f8; 19 | border: 0.2em solid #ddd; 20 | border-radius: 1.6em; 21 | width: 5.3em; 22 | height: 3.2em; 23 | padding: 1em; 24 | transition: all 0.3s ease-out; 25 | display: block; 26 | position: relative; 27 | font-size: 7px; 28 | 29 | &::before { 30 | background: #ffffff; 31 | border-radius: 1.4em; 32 | box-shadow: 0 0.3em 0.3em rgba(0, 0, 0, 0.2), 0 0 0 0.1em #ddd; 33 | content: ''; 34 | display: block; 35 | height: 2.8em; 36 | left: 0; 37 | position: absolute; 38 | right: auto; 39 | text-indent: 4em; 40 | top: 0; 41 | transition: 0.25s ease-in-out; 42 | width: 2.8em; 43 | z-index: 2; 44 | } 45 | 46 | &::after { 47 | background: #f8f8f8; 48 | border-radius: 1.4em; 49 | content: ''; 50 | display: block; 51 | height: 100%; 52 | left: 0; 53 | position: absolute; 54 | top: 0; 55 | transition: 0.25s ease-in-out; 56 | width: 2.8em; 57 | z-index: 1; 58 | } 59 | } 60 | 61 | input:active + .icon::before { 62 | width: 3.2em; 63 | } 64 | 65 | input:checked + .icon { 66 | border-color: var(--pui-button-primary); 67 | box-shadow: inset 0 0 0 2em var(--pui-button-primary); 68 | } 69 | 70 | input:checked + .icon::after { 71 | background-color: var(--pui-button-primary); 72 | right: 1.4em; 73 | width: 100%; 74 | } 75 | 76 | input:checked + .icon::before { 77 | box-shadow: 0 0 0 0.1em transparent, 0 0.3em 0.3em rgba(0, 0, 0, 0.3); 78 | left: calc(100% - 2.8em); 79 | } 80 | 81 | input:checked:active + .icon::before { 82 | left: calc(100% - 3.2em); 83 | } 84 | 85 | .text { 86 | @media screen and (max-width: 968px) { 87 | display: none; 88 | } 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /src/styles/toolbar.less: -------------------------------------------------------------------------------- 1 | // Тулбар 2 | .mrp-toolbar { 3 | display: flex; 4 | gap: 16px; 5 | margin: 0 24px; 6 | 7 | @media screen and (max-width: 1200px) { 8 | margin-top: -8px; 9 | margin-bottom: -8px; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | import { PageType, urlPathByPage } from './constants'; 2 | 3 | export const isPage = (page: PageType): boolean => { 4 | const path = urlPathByPage[page]; 5 | return location.pathname.startsWith(path); 6 | }; 7 | 8 | export const getDomElementAsync = (selector: string, timerLimit = 10000): Promise => { 9 | return new Promise((resolve, reject) => { 10 | try { 11 | setTimeout(() => { 12 | console.log(`Время ожидания DOM элемента ${selector} истекло (${timerLimit / 1000}s)`); 13 | resolve(null); 14 | }, timerLimit); 15 | 16 | let timerId; 17 | 18 | const tick = () => { 19 | const element = document.querySelector(selector) as HTMLElement; 20 | 21 | if (element) { 22 | clearTimeout(timerId); 23 | resolve(element); 24 | } else { 25 | timerId = setTimeout(tick, 100); 26 | } 27 | }; 28 | 29 | tick(); 30 | } catch (e) { 31 | reject(e); 32 | } 33 | }); 34 | }; 35 | 36 | export const createLogger = (isEnabled: boolean) => { 37 | return (...args) => { 38 | if (isEnabled) { 39 | console.log(...args); 40 | } 41 | }; 42 | }; 43 | 44 | export const digitsOnly = (cur: string): number => { 45 | return cur ? +cur.replace(/[^0-9.-]+/g, '') : 0; 46 | }; 47 | 48 | export const sleep = (time: number): Promise => { 49 | return new Promise(resolve => setTimeout(() => resolve(), time)); 50 | }; 51 | 52 | export const cn = (tagName: string, attrs = {}, childrenList = [], parentNode = null): HTMLElement => { 53 | const node = document.createElement(tagName); 54 | 55 | if (typeof attrs === 'object') { 56 | for (const attrsKey in attrs) node.setAttribute(attrsKey, attrs[attrsKey]); 57 | } 58 | 59 | if (Array.isArray(childrenList)) { 60 | childrenList.forEach(child => { 61 | node.appendChild(typeof child === 'string' ? document.createTextNode(child) : child); 62 | }); 63 | } 64 | 65 | if (parentNode) { 66 | parentNode.appendChild(node); 67 | } 68 | 69 | return node; 70 | }; 71 | 72 | export const debounce = (func, wait) => { 73 | let timeout; 74 | return function (...args) { 75 | return new Promise(resolve => { 76 | clearTimeout(timeout); 77 | timeout = setTimeout(() => { 78 | timeout = null; 79 | Promise.resolve(func.apply(this, [...args])).then(resolve); 80 | }, wait); 81 | }); 82 | }; 83 | }; 84 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["ES5", "DOM", "ES2020"], 5 | "noImplicitAny": false, 6 | "resolveJsonModule": true, 7 | "esModuleInterop": true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@ampproject/remapping@^2.2.0": 6 | version "2.2.1" 7 | resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" 8 | integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== 9 | dependencies: 10 | "@jridgewell/gen-mapping" "^0.3.0" 11 | "@jridgewell/trace-mapping" "^0.3.9" 12 | 13 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": 14 | version "7.23.5" 15 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" 16 | integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== 17 | dependencies: 18 | "@babel/highlight" "^7.23.4" 19 | chalk "^2.4.2" 20 | 21 | "@babel/compat-data@^7.23.5": 22 | version "7.23.5" 23 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" 24 | integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== 25 | 26 | "@babel/core@^7.12.0": 27 | version "7.23.6" 28 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.6.tgz#8be77cd77c55baadcc1eae1c33df90ab6d2151d4" 29 | integrity sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw== 30 | dependencies: 31 | "@ampproject/remapping" "^2.2.0" 32 | "@babel/code-frame" "^7.23.5" 33 | "@babel/generator" "^7.23.6" 34 | "@babel/helper-compilation-targets" "^7.23.6" 35 | "@babel/helper-module-transforms" "^7.23.3" 36 | "@babel/helpers" "^7.23.6" 37 | "@babel/parser" "^7.23.6" 38 | "@babel/template" "^7.22.15" 39 | "@babel/traverse" "^7.23.6" 40 | "@babel/types" "^7.23.6" 41 | convert-source-map "^2.0.0" 42 | debug "^4.1.0" 43 | gensync "^1.0.0-beta.2" 44 | json5 "^2.2.3" 45 | semver "^6.3.1" 46 | 47 | "@babel/generator@^7.23.6": 48 | version "7.23.6" 49 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" 50 | integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== 51 | dependencies: 52 | "@babel/types" "^7.23.6" 53 | "@jridgewell/gen-mapping" "^0.3.2" 54 | "@jridgewell/trace-mapping" "^0.3.17" 55 | jsesc "^2.5.1" 56 | 57 | "@babel/helper-compilation-targets@^7.23.6": 58 | version "7.23.6" 59 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" 60 | integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== 61 | dependencies: 62 | "@babel/compat-data" "^7.23.5" 63 | "@babel/helper-validator-option" "^7.23.5" 64 | browserslist "^4.22.2" 65 | lru-cache "^5.1.1" 66 | semver "^6.3.1" 67 | 68 | "@babel/helper-environment-visitor@^7.22.20": 69 | version "7.22.20" 70 | resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" 71 | integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== 72 | 73 | "@babel/helper-function-name@^7.23.0": 74 | version "7.23.0" 75 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" 76 | integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== 77 | dependencies: 78 | "@babel/template" "^7.22.15" 79 | "@babel/types" "^7.23.0" 80 | 81 | "@babel/helper-hoist-variables@^7.22.5": 82 | version "7.22.5" 83 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" 84 | integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== 85 | dependencies: 86 | "@babel/types" "^7.22.5" 87 | 88 | "@babel/helper-module-imports@^7.22.15": 89 | version "7.22.15" 90 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" 91 | integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== 92 | dependencies: 93 | "@babel/types" "^7.22.15" 94 | 95 | "@babel/helper-module-transforms@^7.23.3": 96 | version "7.23.3" 97 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" 98 | integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== 99 | dependencies: 100 | "@babel/helper-environment-visitor" "^7.22.20" 101 | "@babel/helper-module-imports" "^7.22.15" 102 | "@babel/helper-simple-access" "^7.22.5" 103 | "@babel/helper-split-export-declaration" "^7.22.6" 104 | "@babel/helper-validator-identifier" "^7.22.20" 105 | 106 | "@babel/helper-simple-access@^7.22.5": 107 | version "7.22.5" 108 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" 109 | integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== 110 | dependencies: 111 | "@babel/types" "^7.22.5" 112 | 113 | "@babel/helper-split-export-declaration@^7.22.6": 114 | version "7.22.6" 115 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" 116 | integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== 117 | dependencies: 118 | "@babel/types" "^7.22.5" 119 | 120 | "@babel/helper-string-parser@^7.23.4": 121 | version "7.23.4" 122 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" 123 | integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== 124 | 125 | "@babel/helper-validator-identifier@^7.22.20": 126 | version "7.22.20" 127 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" 128 | integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== 129 | 130 | "@babel/helper-validator-option@^7.23.5": 131 | version "7.23.5" 132 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" 133 | integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== 134 | 135 | "@babel/helpers@^7.23.6": 136 | version "7.23.6" 137 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.6.tgz#d03af2ee5fb34691eec0cda90f5ecbb4d4da145a" 138 | integrity sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA== 139 | dependencies: 140 | "@babel/template" "^7.22.15" 141 | "@babel/traverse" "^7.23.6" 142 | "@babel/types" "^7.23.6" 143 | 144 | "@babel/highlight@^7.23.4": 145 | version "7.23.4" 146 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" 147 | integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== 148 | dependencies: 149 | "@babel/helper-validator-identifier" "^7.22.20" 150 | chalk "^2.4.2" 151 | js-tokens "^4.0.0" 152 | 153 | "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": 154 | version "7.23.6" 155 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" 156 | integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== 157 | 158 | "@babel/template@^7.22.15": 159 | version "7.22.15" 160 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" 161 | integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== 162 | dependencies: 163 | "@babel/code-frame" "^7.22.13" 164 | "@babel/parser" "^7.22.15" 165 | "@babel/types" "^7.22.15" 166 | 167 | "@babel/traverse@^7.23.6": 168 | version "7.23.6" 169 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.6.tgz#b53526a2367a0dd6edc423637f3d2d0f2521abc5" 170 | integrity sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ== 171 | dependencies: 172 | "@babel/code-frame" "^7.23.5" 173 | "@babel/generator" "^7.23.6" 174 | "@babel/helper-environment-visitor" "^7.22.20" 175 | "@babel/helper-function-name" "^7.23.0" 176 | "@babel/helper-hoist-variables" "^7.22.5" 177 | "@babel/helper-split-export-declaration" "^7.22.6" 178 | "@babel/parser" "^7.23.6" 179 | "@babel/types" "^7.23.6" 180 | debug "^4.3.1" 181 | globals "^11.1.0" 182 | 183 | "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6": 184 | version "7.23.6" 185 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" 186 | integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== 187 | dependencies: 188 | "@babel/helper-string-parser" "^7.23.4" 189 | "@babel/helper-validator-identifier" "^7.22.20" 190 | to-fast-properties "^2.0.0" 191 | 192 | "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": 193 | version "0.3.3" 194 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" 195 | integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== 196 | dependencies: 197 | "@jridgewell/set-array" "^1.0.1" 198 | "@jridgewell/sourcemap-codec" "^1.4.10" 199 | "@jridgewell/trace-mapping" "^0.3.9" 200 | 201 | "@jridgewell/resolve-uri@^3.1.0": 202 | version "3.1.1" 203 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" 204 | integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== 205 | 206 | "@jridgewell/set-array@^1.0.1": 207 | version "1.1.2" 208 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" 209 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 210 | 211 | "@jridgewell/source-map@^0.3.3": 212 | version "0.3.5" 213 | resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" 214 | integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== 215 | dependencies: 216 | "@jridgewell/gen-mapping" "^0.3.0" 217 | "@jridgewell/trace-mapping" "^0.3.9" 218 | 219 | "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": 220 | version "1.4.15" 221 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" 222 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 223 | 224 | "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": 225 | version "0.3.20" 226 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" 227 | integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== 228 | dependencies: 229 | "@jridgewell/resolve-uri" "^3.1.0" 230 | "@jridgewell/sourcemap-codec" "^1.4.14" 231 | 232 | "@lezer/common@^1.0.0": 233 | version "1.1.2" 234 | resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.1.2.tgz#2fc5cd6788094ffc816b539ab2bc55bafacd2abc" 235 | integrity sha512-V+GqBsga5+cQJMfM0GdnHmg4DgWvLzgMWjbldBg0+jC3k9Gu6nJNZDLJxXEBT1Xj8KhRN4jmbC5CY7SIL++sVw== 236 | 237 | "@lezer/lr@^1.0.0": 238 | version "1.3.14" 239 | resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.3.14.tgz#59d4a3b25698bdac0ef182fa6eadab445fc4f29a" 240 | integrity sha512-z5mY4LStlA3yL7aHT/rqgG614cfcvklS+8oFRFBYrs4YaWLJyKKM4+nN6KopToX0o9Hj6zmH6M5kinOYuy06ug== 241 | dependencies: 242 | "@lezer/common" "^1.0.0" 243 | 244 | "@lmdb/lmdb-darwin-arm64@2.8.5": 245 | version "2.8.5" 246 | resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.8.5.tgz#895d8cb16a9d709ce5fedd8b60022903b875e08e" 247 | integrity sha512-KPDeVScZgA1oq0CiPBcOa3kHIqU+pTOwRFDIhxvmf8CTNvqdZQYp5cCKW0bUk69VygB2PuTiINFWbY78aR2pQw== 248 | 249 | "@lmdb/lmdb-darwin-x64@2.8.5": 250 | version "2.8.5" 251 | resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.8.5.tgz#ca243534c8b37d5516c557e4624256d18dd63184" 252 | integrity sha512-w/sLhN4T7MW1nB3R/U8WK5BgQLz904wh+/SmA2jD8NnF7BLLoUgflCNxOeSPOWp8geP6nP/+VjWzZVip7rZ1ug== 253 | 254 | "@lmdb/lmdb-linux-arm64@2.8.5": 255 | version "2.8.5" 256 | resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.8.5.tgz#b44a8023057e21512eefb9f6120096843b531c1e" 257 | integrity sha512-vtbZRHH5UDlL01TT5jB576Zox3+hdyogvpcbvVJlmU5PdL3c5V7cj1EODdh1CHPksRl+cws/58ugEHi8bcj4Ww== 258 | 259 | "@lmdb/lmdb-linux-arm@2.8.5": 260 | version "2.8.5" 261 | resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.8.5.tgz#17bd54740779c3e4324e78e8f747c21416a84b3d" 262 | integrity sha512-c0TGMbm2M55pwTDIfkDLB6BpIsgxV4PjYck2HiOX+cy/JWiBXz32lYbarPqejKs9Flm7YVAKSILUducU9g2RVg== 263 | 264 | "@lmdb/lmdb-linux-x64@2.8.5": 265 | version "2.8.5" 266 | resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.8.5.tgz#6c61835b6cc58efdf79dbd5e8c72a38300a90302" 267 | integrity sha512-Xkc8IUx9aEhP0zvgeKy7IQ3ReX2N8N1L0WPcQwnZweWmOuKfwpS3GRIYqLtK5za/w3E60zhFfNdS+3pBZPytqQ== 268 | 269 | "@lmdb/lmdb-win32-x64@2.8.5": 270 | version "2.8.5" 271 | resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.8.5.tgz#8233e8762440b0f4632c47a09b1b6f23de8b934c" 272 | integrity sha512-4wvrf5BgnR8RpogHhtpCPJMKBmvyZPhhUtEwMJbXh0ni2BucpfF07jlmyM11zRqQ2XIq6PbC2j7W7UCCcm1rRQ== 273 | 274 | "@mischnic/json-sourcemap@^0.1.0": 275 | version "0.1.1" 276 | resolved "https://registry.yarnpkg.com/@mischnic/json-sourcemap/-/json-sourcemap-0.1.1.tgz#0ef9b015a8f575dd9a8720d9a6b4dbc988425906" 277 | integrity sha512-iA7+tyVqfrATAIsIRWQG+a7ZLLD0VaOCKV2Wd/v4mqIU3J9c4jx9p7S0nw1XH3gJCKNBOOwACOPYYSUu9pgT+w== 278 | dependencies: 279 | "@lezer/common" "^1.0.0" 280 | "@lezer/lr" "^1.0.0" 281 | json5 "^2.2.1" 282 | 283 | "@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2": 284 | version "3.0.2" 285 | resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.2.tgz#44d752c1a2dc113f15f781b7cc4f53a307e3fa38" 286 | integrity sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ== 287 | 288 | "@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.2": 289 | version "3.0.2" 290 | resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.2.tgz#f954f34355712212a8e06c465bc06c40852c6bb3" 291 | integrity sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw== 292 | 293 | "@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.2": 294 | version "3.0.2" 295 | resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.2.tgz#45c63037f045c2b15c44f80f0393fa24f9655367" 296 | integrity sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg== 297 | 298 | "@msgpackr-extract/msgpackr-extract-linux-arm@3.0.2": 299 | version "3.0.2" 300 | resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.2.tgz#35707efeafe6d22b3f373caf9e8775e8920d1399" 301 | integrity sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA== 302 | 303 | "@msgpackr-extract/msgpackr-extract-linux-x64@3.0.2": 304 | version "3.0.2" 305 | resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.2.tgz#091b1218b66c341f532611477ef89e83f25fae4f" 306 | integrity sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA== 307 | 308 | "@msgpackr-extract/msgpackr-extract-win32-x64@3.0.2": 309 | version "3.0.2" 310 | resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.2.tgz#0f164b726869f71da3c594171df5ebc1c4b0a407" 311 | integrity sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ== 312 | 313 | "@parcel/bundler-default@2.10.3": 314 | version "2.10.3" 315 | resolved "https://registry.yarnpkg.com/@parcel/bundler-default/-/bundler-default-2.10.3.tgz#a7a4cce80b008af1ed02cac10bbb6f34f8cf891a" 316 | integrity sha512-a+yq8zH8mrg6FBgUjrC+r3z6cfK7dQVMNzduEU/LF52Z4FVAmTR8gefl/YGmAbquJL3PFAHdhICrljYnQ1WQkg== 317 | dependencies: 318 | "@parcel/diagnostic" "2.10.3" 319 | "@parcel/graph" "3.0.3" 320 | "@parcel/plugin" "2.10.3" 321 | "@parcel/rust" "2.10.3" 322 | "@parcel/utils" "2.10.3" 323 | nullthrows "^1.1.1" 324 | 325 | "@parcel/cache@2.10.3": 326 | version "2.10.3" 327 | resolved "https://registry.yarnpkg.com/@parcel/cache/-/cache-2.10.3.tgz#39b19366c0ebd50786fa040a57844103d97521fe" 328 | integrity sha512-fNNOFOl4dwOlzP8iAa+evZ+3BakX0sV+3+PiYA0zaps7EmPmkTSGDhCWzaYRSO8fhmNDlrUX9Xh7b/X738LFqA== 329 | dependencies: 330 | "@parcel/fs" "2.10.3" 331 | "@parcel/logger" "2.10.3" 332 | "@parcel/utils" "2.10.3" 333 | lmdb "2.8.5" 334 | 335 | "@parcel/codeframe@2.10.3": 336 | version "2.10.3" 337 | resolved "https://registry.yarnpkg.com/@parcel/codeframe/-/codeframe-2.10.3.tgz#6f28b93228d90f2caa527354f983d0c04ca95bb7" 338 | integrity sha512-70ovUzeXBowDMjK+1xaLT4hm3jZUK7EbaCS6tN1cmmr0S1TDhU7g37jnpni+u9de9Lc/lErwTaDVXUf9WSQzQw== 339 | dependencies: 340 | chalk "^4.1.0" 341 | 342 | "@parcel/compressor-raw@2.10.3": 343 | version "2.10.3" 344 | resolved "https://registry.yarnpkg.com/@parcel/compressor-raw/-/compressor-raw-2.10.3.tgz#e9db2a900335f4f6be2833879dd80b319b954997" 345 | integrity sha512-5SUZ80uwu7o0D+0RjhjBnSUXJRgaayfqVQtBRP3U7/W/Bb1Ixm1yDGXtDlyCbzimWqWVMMJ4/eVCEW7I8Ln4Bw== 346 | dependencies: 347 | "@parcel/plugin" "2.10.3" 348 | 349 | "@parcel/config-default@2.10.3": 350 | version "2.10.3" 351 | resolved "https://registry.yarnpkg.com/@parcel/config-default/-/config-default-2.10.3.tgz#9a3e24eb679d3a9f5b5141ede91f6a18cfa69f71" 352 | integrity sha512-gHVw5cKZVA9h/J4E33qQLg3QG3cYMyWVruyVzF8dFy/Rar5ebXMof1f38IhR2BIavpoThbnCnxgD4SVK8xOPag== 353 | dependencies: 354 | "@parcel/bundler-default" "2.10.3" 355 | "@parcel/compressor-raw" "2.10.3" 356 | "@parcel/namer-default" "2.10.3" 357 | "@parcel/optimizer-css" "2.10.3" 358 | "@parcel/optimizer-htmlnano" "2.10.3" 359 | "@parcel/optimizer-image" "2.10.3" 360 | "@parcel/optimizer-svgo" "2.10.3" 361 | "@parcel/optimizer-swc" "2.10.3" 362 | "@parcel/packager-css" "2.10.3" 363 | "@parcel/packager-html" "2.10.3" 364 | "@parcel/packager-js" "2.10.3" 365 | "@parcel/packager-raw" "2.10.3" 366 | "@parcel/packager-svg" "2.10.3" 367 | "@parcel/packager-wasm" "2.10.3" 368 | "@parcel/reporter-dev-server" "2.10.3" 369 | "@parcel/resolver-default" "2.10.3" 370 | "@parcel/runtime-browser-hmr" "2.10.3" 371 | "@parcel/runtime-js" "2.10.3" 372 | "@parcel/runtime-react-refresh" "2.10.3" 373 | "@parcel/runtime-service-worker" "2.10.3" 374 | "@parcel/transformer-babel" "2.10.3" 375 | "@parcel/transformer-css" "2.10.3" 376 | "@parcel/transformer-html" "2.10.3" 377 | "@parcel/transformer-image" "2.10.3" 378 | "@parcel/transformer-js" "2.10.3" 379 | "@parcel/transformer-json" "2.10.3" 380 | "@parcel/transformer-postcss" "2.10.3" 381 | "@parcel/transformer-posthtml" "2.10.3" 382 | "@parcel/transformer-raw" "2.10.3" 383 | "@parcel/transformer-react-refresh-wrap" "2.10.3" 384 | "@parcel/transformer-svg" "2.10.3" 385 | 386 | "@parcel/core@2.10.3": 387 | version "2.10.3" 388 | resolved "https://registry.yarnpkg.com/@parcel/core/-/core-2.10.3.tgz#3de309cb71a6094f0c1e26634804128054c11d02" 389 | integrity sha512-b64FdqJi4CX6iWeLZNfmwdTrC1VLPXHMuFusf1sTZTuRBFw2oRpgJvuiqsrInaZ82o3lbLMo4a9/5LtNaZKa+Q== 390 | dependencies: 391 | "@mischnic/json-sourcemap" "^0.1.0" 392 | "@parcel/cache" "2.10.3" 393 | "@parcel/diagnostic" "2.10.3" 394 | "@parcel/events" "2.10.3" 395 | "@parcel/fs" "2.10.3" 396 | "@parcel/graph" "3.0.3" 397 | "@parcel/logger" "2.10.3" 398 | "@parcel/package-manager" "2.10.3" 399 | "@parcel/plugin" "2.10.3" 400 | "@parcel/profiler" "2.10.3" 401 | "@parcel/rust" "2.10.3" 402 | "@parcel/source-map" "^2.1.1" 403 | "@parcel/types" "2.10.3" 404 | "@parcel/utils" "2.10.3" 405 | "@parcel/workers" "2.10.3" 406 | abortcontroller-polyfill "^1.1.9" 407 | base-x "^3.0.8" 408 | browserslist "^4.6.6" 409 | clone "^2.1.1" 410 | dotenv "^7.0.0" 411 | dotenv-expand "^5.1.0" 412 | json5 "^2.2.0" 413 | msgpackr "^1.9.9" 414 | nullthrows "^1.1.1" 415 | semver "^7.5.2" 416 | 417 | "@parcel/diagnostic@2.10.3": 418 | version "2.10.3" 419 | resolved "https://registry.yarnpkg.com/@parcel/diagnostic/-/diagnostic-2.10.3.tgz#43d9c0e0c7ecdc152d1fad0f88a799b1b7dd222d" 420 | integrity sha512-Hf3xG9UVkDABDXWi89TjEP5U1CLUUj81kx/QFeupBXnzt5GEQZBhkxdBq6+4w17Mmuvk7H5uumNsSptkWq9PCA== 421 | dependencies: 422 | "@mischnic/json-sourcemap" "^0.1.0" 423 | nullthrows "^1.1.1" 424 | 425 | "@parcel/events@2.10.3": 426 | version "2.10.3" 427 | resolved "https://registry.yarnpkg.com/@parcel/events/-/events-2.10.3.tgz#aa9249170947a4628a5a00240bb03ed651349a35" 428 | integrity sha512-I3FsZYmKzgvo1f6frUWdF7hWwpeWTshPrFqpn9ICDXs/1Hjlf32jNXLBqon9b9XUDfMw4nSRMFMzMLJpbdheGA== 429 | 430 | "@parcel/fs@2.10.3": 431 | version "2.10.3" 432 | resolved "https://registry.yarnpkg.com/@parcel/fs/-/fs-2.10.3.tgz#bd23bb962b2e17e907144013aabcf343b8f8aac8" 433 | integrity sha512-0w4+Lc7B5VpwqX4GQfjnI5qN7tc9qbGPSPsf/6U2YPWU4dkGsMfPEmLBx7dZvJy3UiGxpsjMMuRHa14+jJ5QrQ== 434 | dependencies: 435 | "@parcel/rust" "2.10.3" 436 | "@parcel/types" "2.10.3" 437 | "@parcel/utils" "2.10.3" 438 | "@parcel/watcher" "^2.0.7" 439 | "@parcel/workers" "2.10.3" 440 | 441 | "@parcel/graph@3.0.3": 442 | version "3.0.3" 443 | resolved "https://registry.yarnpkg.com/@parcel/graph/-/graph-3.0.3.tgz#c19e2bcf83cc10b0969c5fa824459997c4c10fd2" 444 | integrity sha512-zUA8KsjR2+v2Q2bFBF7zBk33ejriDiRA/+LK5QE8LrFpkaDa+gjkx76h2x7JqGXIDHNos446KX4nz2OUCVwrNQ== 445 | dependencies: 446 | nullthrows "^1.1.1" 447 | 448 | "@parcel/logger@2.10.3": 449 | version "2.10.3" 450 | resolved "https://registry.yarnpkg.com/@parcel/logger/-/logger-2.10.3.tgz#d1b17a3a500183e2525b0116b6885fd801aa6c6b" 451 | integrity sha512-mAVTA0NgbbwEUzkzjBqjqyBBax+8bscRaZIAsEqMiSFWGcUmRgwVlH/jy3QDkFc7OHzwvdPK+XlMLV7s/3DJNw== 452 | dependencies: 453 | "@parcel/diagnostic" "2.10.3" 454 | "@parcel/events" "2.10.3" 455 | 456 | "@parcel/markdown-ansi@2.10.3": 457 | version "2.10.3" 458 | resolved "https://registry.yarnpkg.com/@parcel/markdown-ansi/-/markdown-ansi-2.10.3.tgz#b090d241c458e4c7b0480fed17600bd0f1faefae" 459 | integrity sha512-uzN1AJmp1oYh/ZLdD9WA7xP5u/L3Bs/6AFZz5s695zus74RCx9OtQcF0Yyl1hbKVJDfuw9WFuzMfPL/9p/C5DQ== 460 | dependencies: 461 | chalk "^4.1.0" 462 | 463 | "@parcel/namer-default@2.10.3": 464 | version "2.10.3" 465 | resolved "https://registry.yarnpkg.com/@parcel/namer-default/-/namer-default-2.10.3.tgz#54564418fad528c96d2b36ecfe2fba3f5591bdb7" 466 | integrity sha512-s7kgB/x7TISIHhen9IK4+CBXgmRJYahVS+oiAbMm18vcUVuXeZDBeTedOco6zUQIKuB71vx/4DBIuiIp6Q9hpg== 467 | dependencies: 468 | "@parcel/diagnostic" "2.10.3" 469 | "@parcel/plugin" "2.10.3" 470 | nullthrows "^1.1.1" 471 | 472 | "@parcel/node-resolver-core@3.1.3": 473 | version "3.1.3" 474 | resolved "https://registry.yarnpkg.com/@parcel/node-resolver-core/-/node-resolver-core-3.1.3.tgz#7d0e944bccfdf2954dbcf8ba000d0251887f14c0" 475 | integrity sha512-o7XK1KiK3ymO39bhc5qfDQiZpKA1xQmKg0TEPDNiLIXHKLEBheqarhw3Nwwt9MOFibfwsisQtDTIS+2v9A640A== 476 | dependencies: 477 | "@mischnic/json-sourcemap" "^0.1.0" 478 | "@parcel/diagnostic" "2.10.3" 479 | "@parcel/fs" "2.10.3" 480 | "@parcel/rust" "2.10.3" 481 | "@parcel/utils" "2.10.3" 482 | nullthrows "^1.1.1" 483 | semver "^7.5.2" 484 | 485 | "@parcel/optimizer-css@2.10.3": 486 | version "2.10.3" 487 | resolved "https://registry.yarnpkg.com/@parcel/optimizer-css/-/optimizer-css-2.10.3.tgz#6fd3514b0d3c52e3354855ceb245842eff5e06de" 488 | integrity sha512-Pc8jwV3U9w5DJDNcRQML5FlKdpPGnuCTtk1P+9FfyEUjdxoVxC+YeMIQcE961clAgl47qh7eNObXtsX/lb04Dg== 489 | dependencies: 490 | "@parcel/diagnostic" "2.10.3" 491 | "@parcel/plugin" "2.10.3" 492 | "@parcel/source-map" "^2.1.1" 493 | "@parcel/utils" "2.10.3" 494 | browserslist "^4.6.6" 495 | lightningcss "^1.16.1" 496 | nullthrows "^1.1.1" 497 | 498 | "@parcel/optimizer-htmlnano@2.10.3": 499 | version "2.10.3" 500 | resolved "https://registry.yarnpkg.com/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.10.3.tgz#4f8266892309dc5279a7a03c7cabc26e5ee56121" 501 | integrity sha512-KTIZOy19tYeG0j3JRv435A6jnTh3O1LPhsUfo6Xlea7Cz1yUUxAANl9MG8lHZKYbZCFFKbfk2I9QBycmcYxAAw== 502 | dependencies: 503 | "@parcel/plugin" "2.10.3" 504 | htmlnano "^2.0.0" 505 | nullthrows "^1.1.1" 506 | posthtml "^0.16.5" 507 | svgo "^2.4.0" 508 | 509 | "@parcel/optimizer-image@2.10.3": 510 | version "2.10.3" 511 | resolved "https://registry.yarnpkg.com/@parcel/optimizer-image/-/optimizer-image-2.10.3.tgz#374f4308b3fbffa072646ef605cc7e740e471600" 512 | integrity sha512-hbeI6+GoddJxib8MlK5iafbCm1oy3p0UL9bb8s5mjTZiHtj1PORlH8gP7mT1WlYOCgoy45QdHelcrmL9fJ8kBA== 513 | dependencies: 514 | "@parcel/diagnostic" "2.10.3" 515 | "@parcel/plugin" "2.10.3" 516 | "@parcel/rust" "2.10.3" 517 | "@parcel/utils" "2.10.3" 518 | "@parcel/workers" "2.10.3" 519 | 520 | "@parcel/optimizer-svgo@2.10.3": 521 | version "2.10.3" 522 | resolved "https://registry.yarnpkg.com/@parcel/optimizer-svgo/-/optimizer-svgo-2.10.3.tgz#654ab6b5abde66cebf672cec38dce620abf4037c" 523 | integrity sha512-STN7sdjz6wGnQnvy22SkQaLi5C1E+j7J0xy96T0/mCP9KoIsBDE7panCtf53p4sWCNRsXNVrXt5KrpCC+u0LHg== 524 | dependencies: 525 | "@parcel/diagnostic" "2.10.3" 526 | "@parcel/plugin" "2.10.3" 527 | "@parcel/utils" "2.10.3" 528 | svgo "^2.4.0" 529 | 530 | "@parcel/optimizer-swc@2.10.3": 531 | version "2.10.3" 532 | resolved "https://registry.yarnpkg.com/@parcel/optimizer-swc/-/optimizer-swc-2.10.3.tgz#96f3dd10addced8b21041315d6802ee2aab53027" 533 | integrity sha512-Cxy05CysiKbv/PtX++ETje4cbhCJySmN6EmFyQBs0jvzsUdWwqnsttavYRoMviUUK9mjm/i5q+cyewBO/8Oc5g== 534 | dependencies: 535 | "@parcel/diagnostic" "2.10.3" 536 | "@parcel/plugin" "2.10.3" 537 | "@parcel/source-map" "^2.1.1" 538 | "@parcel/utils" "2.10.3" 539 | "@swc/core" "^1.3.36" 540 | nullthrows "^1.1.1" 541 | 542 | "@parcel/optimizer-terser@^2.10.3": 543 | version "2.10.3" 544 | resolved "https://registry.yarnpkg.com/@parcel/optimizer-terser/-/optimizer-terser-2.10.3.tgz#10e59c8b2ecf1f1b7187851413d0c7920a9a29e2" 545 | integrity sha512-u0Z1+3xLPyjpV3fTIR28jj4vmGVPSAmFMhIBTixPIYSMhf/cW2oOnyB9Ih8UaHz9M0bGO9aMrlsqjHMXhIMx2g== 546 | dependencies: 547 | "@parcel/diagnostic" "2.10.3" 548 | "@parcel/plugin" "2.10.3" 549 | "@parcel/source-map" "^2.1.1" 550 | "@parcel/utils" "2.10.3" 551 | nullthrows "^1.1.1" 552 | terser "^5.2.0" 553 | 554 | "@parcel/package-manager@2.10.3": 555 | version "2.10.3" 556 | resolved "https://registry.yarnpkg.com/@parcel/package-manager/-/package-manager-2.10.3.tgz#e856ad728d0c7fef51924451e032c4b6cc974c86" 557 | integrity sha512-KqOW5oUmElrcb7d+hOC68ja1PI2qbPZTwdduduRvB90DAweMt7r1046+W2Df5bd+p9iv72DxGEn9xomX+qz9MA== 558 | dependencies: 559 | "@parcel/diagnostic" "2.10.3" 560 | "@parcel/fs" "2.10.3" 561 | "@parcel/logger" "2.10.3" 562 | "@parcel/node-resolver-core" "3.1.3" 563 | "@parcel/types" "2.10.3" 564 | "@parcel/utils" "2.10.3" 565 | "@parcel/workers" "2.10.3" 566 | semver "^7.5.2" 567 | 568 | "@parcel/packager-css@2.10.3": 569 | version "2.10.3" 570 | resolved "https://registry.yarnpkg.com/@parcel/packager-css/-/packager-css-2.10.3.tgz#6045778e8c1849b55bf9351db13dd3c452759ce0" 571 | integrity sha512-Jk165fFU2XyWjN7agKy+YvvRoOJbWIb57VlVDgBHanB5ptS7aCildambrljGNTivatr+zFrchE5ZDNUFXZhYnw== 572 | dependencies: 573 | "@parcel/diagnostic" "2.10.3" 574 | "@parcel/plugin" "2.10.3" 575 | "@parcel/source-map" "^2.1.1" 576 | "@parcel/utils" "2.10.3" 577 | nullthrows "^1.1.1" 578 | 579 | "@parcel/packager-html@2.10.3": 580 | version "2.10.3" 581 | resolved "https://registry.yarnpkg.com/@parcel/packager-html/-/packager-html-2.10.3.tgz#937ab185dcfbe910a7243758803db0fbb396042b" 582 | integrity sha512-bEI6FhBvERuoqyi/h681qGImTRBUnqNW4sKoFO67q/bxWLevXtEGMFOeqridiVOjYQH9s1kKwM/ln/UwKVazZw== 583 | dependencies: 584 | "@parcel/plugin" "2.10.3" 585 | "@parcel/types" "2.10.3" 586 | "@parcel/utils" "2.10.3" 587 | nullthrows "^1.1.1" 588 | posthtml "^0.16.5" 589 | 590 | "@parcel/packager-js@2.10.3": 591 | version "2.10.3" 592 | resolved "https://registry.yarnpkg.com/@parcel/packager-js/-/packager-js-2.10.3.tgz#66538229a7edc795e763ec5ceed6e6265eb2f54d" 593 | integrity sha512-SjLSDw0juC7bEk/0geUtSVXaZqm2SgHL2IZaPnkoBQxVqzh2MdvAxJCrS2LxiR/cuQRfvQ5bnoJA7Kk1w2VNAg== 594 | dependencies: 595 | "@parcel/diagnostic" "2.10.3" 596 | "@parcel/plugin" "2.10.3" 597 | "@parcel/rust" "2.10.3" 598 | "@parcel/source-map" "^2.1.1" 599 | "@parcel/types" "2.10.3" 600 | "@parcel/utils" "2.10.3" 601 | globals "^13.2.0" 602 | nullthrows "^1.1.1" 603 | 604 | "@parcel/packager-raw@2.10.3": 605 | version "2.10.3" 606 | resolved "https://registry.yarnpkg.com/@parcel/packager-raw/-/packager-raw-2.10.3.tgz#96c92170b49f306e015540dc85794b90c4e3174f" 607 | integrity sha512-d236tnP2ViOnUJR0+qG6EHw7MUWSA14fLKnYYzL5SRQ4BVo5XC+CM9HKN5O4YCCVu3+9Su2X1+RESo5sxbFq7w== 608 | dependencies: 609 | "@parcel/plugin" "2.10.3" 610 | 611 | "@parcel/packager-svg@2.10.3": 612 | version "2.10.3" 613 | resolved "https://registry.yarnpkg.com/@parcel/packager-svg/-/packager-svg-2.10.3.tgz#5b5674ff47a04a0178b54eb9c21a4c297a657a13" 614 | integrity sha512-Rk/GokkNs9uLwiy6Ux/xXpD8nMVhA9LN9eIbVqi8+eR42xUmICmEoUoSm+CnekkXxY2a5e3mKpL7JZbT9vOEhA== 615 | dependencies: 616 | "@parcel/plugin" "2.10.3" 617 | "@parcel/types" "2.10.3" 618 | "@parcel/utils" "2.10.3" 619 | posthtml "^0.16.4" 620 | 621 | "@parcel/packager-wasm@2.10.3": 622 | version "2.10.3" 623 | resolved "https://registry.yarnpkg.com/@parcel/packager-wasm/-/packager-wasm-2.10.3.tgz#30c7f0eac43717cd2f2ccdacd99731138696df0b" 624 | integrity sha512-j6VmU84LKy+XRHgZQFoASG98P50a9tkeT3LYRrol3RGGQrvx7PT3/D6rOqbnQjR2iGnaHzYoAlgg9jIMmWXYiA== 625 | dependencies: 626 | "@parcel/plugin" "2.10.3" 627 | 628 | "@parcel/plugin@2.10.3": 629 | version "2.10.3" 630 | resolved "https://registry.yarnpkg.com/@parcel/plugin/-/plugin-2.10.3.tgz#c8055dded9beee2c0269edfdb7acdfb7df64469b" 631 | integrity sha512-FgsfGKSdtSV1EcO2NWFCZaY14W0PnEEF8vZaRCTML3vKfUbilYs/biaqf5geFOu4DwRuCC8unOTqFy7dLwcK/A== 632 | dependencies: 633 | "@parcel/types" "2.10.3" 634 | 635 | "@parcel/profiler@2.10.3": 636 | version "2.10.3" 637 | resolved "https://registry.yarnpkg.com/@parcel/profiler/-/profiler-2.10.3.tgz#0def95e18b0f71756524c4120e88a77895e9783e" 638 | integrity sha512-yikaM6/vsvjDCcBHAXTKmDsWUF3UvC0lMG8RpnuVSN+R40MGH1vyrR4vNnqhkiCcs0RkVXm7bpuz3cDJLNLYSQ== 639 | dependencies: 640 | "@parcel/diagnostic" "2.10.3" 641 | "@parcel/events" "2.10.3" 642 | chrome-trace-event "^1.0.2" 643 | 644 | "@parcel/reporter-cli@2.10.3": 645 | version "2.10.3" 646 | resolved "https://registry.yarnpkg.com/@parcel/reporter-cli/-/reporter-cli-2.10.3.tgz#c7942c56b4d66701b7776c0fe4aca4ce0793fed1" 647 | integrity sha512-p5xQTPRuB1K3eI3Ro90vcdxpdt0VqIgrUP/VJKtSI8I3fLLGgPBNmSZejqqLup3jFRzUttQPHYkWl/R14LHjAQ== 648 | dependencies: 649 | "@parcel/plugin" "2.10.3" 650 | "@parcel/types" "2.10.3" 651 | "@parcel/utils" "2.10.3" 652 | chalk "^4.1.0" 653 | term-size "^2.2.1" 654 | 655 | "@parcel/reporter-dev-server@2.10.3": 656 | version "2.10.3" 657 | resolved "https://registry.yarnpkg.com/@parcel/reporter-dev-server/-/reporter-dev-server-2.10.3.tgz#5d287fb8480488d212c4a5c33f2ea552e7bab7fb" 658 | integrity sha512-1Kzb2TrlnOYhGwFXZYCeoO18hpVhI3pRXnN22li9ZmdpeugZ0zZJamfPV8Duj4sBvBoSajbZhiPAe/6tQgWDSA== 659 | dependencies: 660 | "@parcel/plugin" "2.10.3" 661 | "@parcel/utils" "2.10.3" 662 | 663 | "@parcel/reporter-tracer@2.10.3": 664 | version "2.10.3" 665 | resolved "https://registry.yarnpkg.com/@parcel/reporter-tracer/-/reporter-tracer-2.10.3.tgz#55a19b2abc3726c541f18de10423f05954ca5b87" 666 | integrity sha512-53T9VPJvCi4Co0iTmNN+nqFD+Fkt3QFW8CPXBVlmlQzOtufVjDb01VsE1NPD8/J7O0jd548HJX/s5uqT0380jg== 667 | dependencies: 668 | "@parcel/plugin" "2.10.3" 669 | "@parcel/utils" "2.10.3" 670 | chrome-trace-event "^1.0.3" 671 | nullthrows "^1.1.1" 672 | 673 | "@parcel/resolver-default@2.10.3": 674 | version "2.10.3" 675 | resolved "https://registry.yarnpkg.com/@parcel/resolver-default/-/resolver-default-2.10.3.tgz#df8dac49201d84934308a4e30142faa946786a76" 676 | integrity sha512-TQc1LwpvEKyF3CnU9ifHOKV2usFLVYmMAVAkxyKKGTbnJGEqBDQ0ITqTapA6bJLvZ6d2eUT7guqd4nrBEjeZpw== 677 | dependencies: 678 | "@parcel/node-resolver-core" "3.1.3" 679 | "@parcel/plugin" "2.10.3" 680 | 681 | "@parcel/runtime-browser-hmr@2.10.3": 682 | version "2.10.3" 683 | resolved "https://registry.yarnpkg.com/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.10.3.tgz#2b584272c437350c564d3c6cff3e6c228405931c" 684 | integrity sha512-+6+mlJiLL3aNVIEyXMUPbPSgljYgnbl9JNMbEXikDQpGGiXTZ7gNNKsqwYeYzgQBYwgqRfR2ir6Bznc2R7dvxg== 685 | dependencies: 686 | "@parcel/plugin" "2.10.3" 687 | "@parcel/utils" "2.10.3" 688 | 689 | "@parcel/runtime-js@2.10.3": 690 | version "2.10.3" 691 | resolved "https://registry.yarnpkg.com/@parcel/runtime-js/-/runtime-js-2.10.3.tgz#505552942014356b7199f2411b3093b4bc399157" 692 | integrity sha512-EMLgZzBGf5ylOT5U/N2rBK5ZZxnmEM4aJsissEAxcE/2cgE8TyhSng6p3A88vVJlO/unHcwRuFGlxKCueugGsQ== 693 | dependencies: 694 | "@parcel/diagnostic" "2.10.3" 695 | "@parcel/plugin" "2.10.3" 696 | "@parcel/utils" "2.10.3" 697 | nullthrows "^1.1.1" 698 | 699 | "@parcel/runtime-react-refresh@2.10.3": 700 | version "2.10.3" 701 | resolved "https://registry.yarnpkg.com/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.10.3.tgz#c88aa09b0984b81c4db1be4defad63252063ce75" 702 | integrity sha512-l03mni8XJq3fmeAV8UYlKJ/+u0LYRuk6ZVP0VLYLwgK4O0mlRuxwaZWYUeB8r/kTsEjB3gF/9AAtUZdAC7Swow== 703 | dependencies: 704 | "@parcel/plugin" "2.10.3" 705 | "@parcel/utils" "2.10.3" 706 | react-error-overlay "6.0.9" 707 | react-refresh "^0.9.0" 708 | 709 | "@parcel/runtime-service-worker@2.10.3": 710 | version "2.10.3" 711 | resolved "https://registry.yarnpkg.com/@parcel/runtime-service-worker/-/runtime-service-worker-2.10.3.tgz#62d03fed56931cfe53a8373acb219c8665f9f1b1" 712 | integrity sha512-NjhS80t+O5iBgKXIQ+i07ZEh/VW8XHzanwTHmznJXEoIjLoBpELZ9r6bV/eUD3mYgM1vmW9Aijdu5xtsd0JW6A== 713 | dependencies: 714 | "@parcel/plugin" "2.10.3" 715 | "@parcel/utils" "2.10.3" 716 | nullthrows "^1.1.1" 717 | 718 | "@parcel/rust@2.10.3": 719 | version "2.10.3" 720 | resolved "https://registry.yarnpkg.com/@parcel/rust/-/rust-2.10.3.tgz#d5992ad0016f828dc2d1214fbd8e376f351d3efb" 721 | integrity sha512-s1dD1QI/6JkWLICsFh8/iUvO7W1aj/avx+2mCSzuwEIsMywexpBf56qhVYMa3D9D50hS1h5FMk9RrSnSiPf8WA== 722 | 723 | "@parcel/source-map@^2.1.1": 724 | version "2.1.1" 725 | resolved "https://registry.yarnpkg.com/@parcel/source-map/-/source-map-2.1.1.tgz#fb193b82dba6dd62cc7a76b326f57bb35000a782" 726 | integrity sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew== 727 | dependencies: 728 | detect-libc "^1.0.3" 729 | 730 | "@parcel/transformer-babel@2.10.3": 731 | version "2.10.3" 732 | resolved "https://registry.yarnpkg.com/@parcel/transformer-babel/-/transformer-babel-2.10.3.tgz#10430b076e7226d23f54916e980665975b6f05bc" 733 | integrity sha512-SDTyDZX3WTkX7WS5Dg5cBLjWtIkUeeHezIjeOI4cw40tBjj5bXRR2TBfPsqwOnpTHr5jhNSicD6DN+XfTI2MMw== 734 | dependencies: 735 | "@parcel/diagnostic" "2.10.3" 736 | "@parcel/plugin" "2.10.3" 737 | "@parcel/source-map" "^2.1.1" 738 | "@parcel/utils" "2.10.3" 739 | browserslist "^4.6.6" 740 | json5 "^2.2.0" 741 | nullthrows "^1.1.1" 742 | semver "^7.5.2" 743 | 744 | "@parcel/transformer-css@2.10.3": 745 | version "2.10.3" 746 | resolved "https://registry.yarnpkg.com/@parcel/transformer-css/-/transformer-css-2.10.3.tgz#6a0b80649c676298e36ad0a37d55481609051f78" 747 | integrity sha512-qlPYcwVgbqFHrec6CKcTQ4hY7EkjvH40Wyqf0xjAyIoIuOPmrpSUOp+VKjeRdbyFwH/4GBjrDZMBvCUsgeM2GA== 748 | dependencies: 749 | "@parcel/diagnostic" "2.10.3" 750 | "@parcel/plugin" "2.10.3" 751 | "@parcel/source-map" "^2.1.1" 752 | "@parcel/utils" "2.10.3" 753 | browserslist "^4.6.6" 754 | lightningcss "^1.16.1" 755 | nullthrows "^1.1.1" 756 | 757 | "@parcel/transformer-html@2.10.3": 758 | version "2.10.3" 759 | resolved "https://registry.yarnpkg.com/@parcel/transformer-html/-/transformer-html-2.10.3.tgz#bd60209c4b87668933e6ad21108144f8a0a76c9a" 760 | integrity sha512-u0uklWpliEcPADtBlboxhxBvlGrP0yPRZk/A2iL0VhfAi9ONFEuJkEoesispNhAg3KiojEh0Ddzu7bYp9U0yww== 761 | dependencies: 762 | "@parcel/diagnostic" "2.10.3" 763 | "@parcel/plugin" "2.10.3" 764 | "@parcel/rust" "2.10.3" 765 | nullthrows "^1.1.1" 766 | posthtml "^0.16.5" 767 | posthtml-parser "^0.10.1" 768 | posthtml-render "^3.0.0" 769 | semver "^7.5.2" 770 | srcset "4" 771 | 772 | "@parcel/transformer-image@2.10.3": 773 | version "2.10.3" 774 | resolved "https://registry.yarnpkg.com/@parcel/transformer-image/-/transformer-image-2.10.3.tgz#8b460b531e19cba9f9c24f4153b714b064e63670" 775 | integrity sha512-At7D7eMauE+/EnlXiDfNSap2te11L0TIW55SC9iTRTI/CqesWfT96ZB/LcH3HXckYy/GJi0xyTjYxC/YjUqDog== 776 | dependencies: 777 | "@parcel/plugin" "2.10.3" 778 | "@parcel/utils" "2.10.3" 779 | "@parcel/workers" "2.10.3" 780 | nullthrows "^1.1.1" 781 | 782 | "@parcel/transformer-inline-string@^2.10.3": 783 | version "2.10.3" 784 | resolved "https://registry.yarnpkg.com/@parcel/transformer-inline-string/-/transformer-inline-string-2.10.3.tgz#96e916f8465bb22ef953986251b62f4b7ef6c8e8" 785 | integrity sha512-vOxBqLkzouA744b4x1KoaV4+Lo8kQmnz1Y2ahlnt2bEER3TMJpGiEiggFahq3WQKOOFOfhBcVFH0ncBCszCfWg== 786 | dependencies: 787 | "@parcel/plugin" "2.10.3" 788 | 789 | "@parcel/transformer-js@2.10.3": 790 | version "2.10.3" 791 | resolved "https://registry.yarnpkg.com/@parcel/transformer-js/-/transformer-js-2.10.3.tgz#7274113277ad4676fb46afd68a9fcda1a84d13ec" 792 | integrity sha512-9pGqrCSLlipXvL7hOrLsaW5Pq4bjFBOTiZ5k5kizk1qeuHKMIHxySGdy0E35eSsJ6JzXP0lTXPywMPysSI6owQ== 793 | dependencies: 794 | "@parcel/diagnostic" "2.10.3" 795 | "@parcel/plugin" "2.10.3" 796 | "@parcel/rust" "2.10.3" 797 | "@parcel/source-map" "^2.1.1" 798 | "@parcel/utils" "2.10.3" 799 | "@parcel/workers" "2.10.3" 800 | "@swc/helpers" "^0.5.0" 801 | browserslist "^4.6.6" 802 | nullthrows "^1.1.1" 803 | regenerator-runtime "^0.13.7" 804 | semver "^7.5.2" 805 | 806 | "@parcel/transformer-json@2.10.3": 807 | version "2.10.3" 808 | resolved "https://registry.yarnpkg.com/@parcel/transformer-json/-/transformer-json-2.10.3.tgz#1efb938de14f9e315c7f9cc9218457305dae8564" 809 | integrity sha512-cPhiQNgrX92VEATuxf3GCPQnlfnZW1iCsOHMT1CzgmofE7tVlW1hOOokWw21/8spG44Zax0SrRW0udi9TdmpQA== 810 | dependencies: 811 | "@parcel/plugin" "2.10.3" 812 | json5 "^2.2.0" 813 | 814 | "@parcel/transformer-less@2.10.3": 815 | version "2.10.3" 816 | resolved "https://registry.yarnpkg.com/@parcel/transformer-less/-/transformer-less-2.10.3.tgz#dca2048b970eafe8c354f21be7887aa59ae9cd74" 817 | integrity sha512-RnGOVYNZiG5VQzDnUQRe4TIgh5hoDYP+xDoSDc6fmxKDV9ZDzj2+p+N6vGZN6Xg4X6g7ldsAV6nkn31848WWHA== 818 | dependencies: 819 | "@parcel/plugin" "2.10.3" 820 | "@parcel/source-map" "^2.1.1" 821 | less "^4.1.1" 822 | 823 | "@parcel/transformer-postcss@2.10.3": 824 | version "2.10.3" 825 | resolved "https://registry.yarnpkg.com/@parcel/transformer-postcss/-/transformer-postcss-2.10.3.tgz#8b5c4756c4e0a64ff3a88fac5b26eb3601056fe7" 826 | integrity sha512-SpTZQdGQ3aVvl6+3tLlw/txUyzZSsv8t+hcfc9PM0n1rd4mfjWxVKmgNC1Y3nFoSubLMp+03GbMq16ym8t89WQ== 827 | dependencies: 828 | "@parcel/diagnostic" "2.10.3" 829 | "@parcel/plugin" "2.10.3" 830 | "@parcel/rust" "2.10.3" 831 | "@parcel/utils" "2.10.3" 832 | clone "^2.1.1" 833 | nullthrows "^1.1.1" 834 | postcss-value-parser "^4.2.0" 835 | semver "^7.5.2" 836 | 837 | "@parcel/transformer-posthtml@2.10.3": 838 | version "2.10.3" 839 | resolved "https://registry.yarnpkg.com/@parcel/transformer-posthtml/-/transformer-posthtml-2.10.3.tgz#25f8361cad4d3a2abd23c0ec148562a1ca76c42d" 840 | integrity sha512-k6pz0H/W1k+i9uDNXjum7XkaFYKvSSrgEsmhoh7OriXPrLunboIzMBXFQcQSCyxCpw/kLuKFBLP38mQnYC5BbQ== 841 | dependencies: 842 | "@parcel/plugin" "2.10.3" 843 | "@parcel/utils" "2.10.3" 844 | nullthrows "^1.1.1" 845 | posthtml "^0.16.5" 846 | posthtml-parser "^0.10.1" 847 | posthtml-render "^3.0.0" 848 | semver "^7.5.2" 849 | 850 | "@parcel/transformer-raw@2.10.3": 851 | version "2.10.3" 852 | resolved "https://registry.yarnpkg.com/@parcel/transformer-raw/-/transformer-raw-2.10.3.tgz#bbda9f554e6cb8985039a97d80eb5468b2109f25" 853 | integrity sha512-r//P2Hg14m/vJK/XJyq0cmcS4RTRy4bPSL4c0FxbEdDRrSm0Hcd1gdfgl0HeqSQQfcz0Xu4nCM5zAhg6FUpiXQ== 854 | dependencies: 855 | "@parcel/plugin" "2.10.3" 856 | 857 | "@parcel/transformer-react-refresh-wrap@2.10.3": 858 | version "2.10.3" 859 | resolved "https://registry.yarnpkg.com/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.10.3.tgz#872377fe4d1abac83780f68f1e95656ebb91f0fe" 860 | integrity sha512-Sc6ExGQy/YhNYFxRgEyi4SikYmV3wbATYo/VzqUjvZ4vE9YXM0sC5CyJhcoWVHmMPhm5eowOwFA6UrTsgHd2+g== 861 | dependencies: 862 | "@parcel/plugin" "2.10.3" 863 | "@parcel/utils" "2.10.3" 864 | react-refresh "^0.9.0" 865 | 866 | "@parcel/transformer-svg@2.10.3": 867 | version "2.10.3" 868 | resolved "https://registry.yarnpkg.com/@parcel/transformer-svg/-/transformer-svg-2.10.3.tgz#349b276e784e4169971112e9ed54c2fe2f0af229" 869 | integrity sha512-fjkTdPB8y467I/yHPEaNxNxoGtRIgEqNjVkBhtE/ibhF/YfqIEpDlJyI7G5G71pt2peLMLXZnJowzHqeoEUHOQ== 870 | dependencies: 871 | "@parcel/diagnostic" "2.10.3" 872 | "@parcel/plugin" "2.10.3" 873 | "@parcel/rust" "2.10.3" 874 | nullthrows "^1.1.1" 875 | posthtml "^0.16.5" 876 | posthtml-parser "^0.10.1" 877 | posthtml-render "^3.0.0" 878 | semver "^7.5.2" 879 | 880 | "@parcel/types@2.10.3": 881 | version "2.10.3" 882 | resolved "https://registry.yarnpkg.com/@parcel/types/-/types-2.10.3.tgz#8f8c4f1f837b0466cc132ba4fdc96edd9da4927f" 883 | integrity sha512-4ISgDKcbJsR7NKj2jquPUPQWc/b2x6zHb/jZVdHVzMQxJp98DX+cvQR137iOTXUAFtwkKVjFcHWfejwGdGf9bw== 884 | dependencies: 885 | "@parcel/cache" "2.10.3" 886 | "@parcel/diagnostic" "2.10.3" 887 | "@parcel/fs" "2.10.3" 888 | "@parcel/package-manager" "2.10.3" 889 | "@parcel/source-map" "^2.1.1" 890 | "@parcel/workers" "2.10.3" 891 | utility-types "^3.10.0" 892 | 893 | "@parcel/utils@2.10.3": 894 | version "2.10.3" 895 | resolved "https://registry.yarnpkg.com/@parcel/utils/-/utils-2.10.3.tgz#16c967b76c684ec206eaa7a16abd16fa4e4a55af" 896 | integrity sha512-l9pEQgq+D57t42m2sJkdU08Dpp0HVzDEwVrp/by/l37ZkYPJ2Me3oXtsJhvA+hej2kO8+FuKPm64FaUVaA2g+w== 897 | dependencies: 898 | "@parcel/codeframe" "2.10.3" 899 | "@parcel/diagnostic" "2.10.3" 900 | "@parcel/logger" "2.10.3" 901 | "@parcel/markdown-ansi" "2.10.3" 902 | "@parcel/rust" "2.10.3" 903 | "@parcel/source-map" "^2.1.1" 904 | chalk "^4.1.0" 905 | nullthrows "^1.1.1" 906 | 907 | "@parcel/watcher-android-arm64@2.3.0": 908 | version "2.3.0" 909 | resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.3.0.tgz#d82e74bb564ebd4d8a88791d273a3d2bd61e27ab" 910 | integrity sha512-f4o9eA3dgk0XRT3XhB0UWpWpLnKgrh1IwNJKJ7UJek7eTYccQ8LR7XUWFKqw6aEq5KUNlCcGvSzKqSX/vtWVVA== 911 | 912 | "@parcel/watcher-darwin-arm64@2.3.0": 913 | version "2.3.0" 914 | resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.3.0.tgz#c9cd03f8f233d512fcfc873d5b4e23f1569a82ad" 915 | integrity sha512-mKY+oijI4ahBMc/GygVGvEdOq0L4DxhYgwQqYAz/7yPzuGi79oXrZG52WdpGA1wLBPrYb0T8uBaGFo7I6rvSKw== 916 | 917 | "@parcel/watcher-darwin-x64@2.3.0": 918 | version "2.3.0" 919 | resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.3.0.tgz#83c902994a2a49b9e1ab5050dba24876fdc2c219" 920 | integrity sha512-20oBj8LcEOnLE3mgpy6zuOq8AplPu9NcSSSfyVKgfOhNAc4eF4ob3ldj0xWjGGbOF7Dcy1Tvm6ytvgdjlfUeow== 921 | 922 | "@parcel/watcher-freebsd-x64@2.3.0": 923 | version "2.3.0" 924 | resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.3.0.tgz#7a0f4593a887e2752b706aff2dae509aef430cf6" 925 | integrity sha512-7LftKlaHunueAEiojhCn+Ef2CTXWsLgTl4hq0pkhkTBFI3ssj2bJXmH2L67mKpiAD5dz66JYk4zS66qzdnIOgw== 926 | 927 | "@parcel/watcher-linux-arm-glibc@2.3.0": 928 | version "2.3.0" 929 | resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.3.0.tgz#3fc90c3ebe67de3648ed2f138068722f9b1d47da" 930 | integrity sha512-1apPw5cD2xBv1XIHPUlq0cO6iAaEUQ3BcY0ysSyD9Kuyw4MoWm1DV+W9mneWI+1g6OeP6dhikiFE6BlU+AToTQ== 931 | 932 | "@parcel/watcher-linux-arm64-glibc@2.3.0": 933 | version "2.3.0" 934 | resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.3.0.tgz#f7bbbf2497d85fd11e4c9e9c26ace8f10ea9bcbc" 935 | integrity sha512-mQ0gBSQEiq1k/MMkgcSB0Ic47UORZBmWoAWlMrTW6nbAGoLZP+h7AtUM7H3oDu34TBFFvjy4JCGP43JlylkTQA== 936 | 937 | "@parcel/watcher-linux-arm64-musl@2.3.0": 938 | version "2.3.0" 939 | resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.3.0.tgz#de131a9fcbe1fa0854e9cbf4c55bed3b35bcff43" 940 | integrity sha512-LXZAExpepJew0Gp8ZkJ+xDZaTQjLHv48h0p0Vw2VMFQ8A+RKrAvpFuPVCVwKJCr5SE+zvaG+Etg56qXvTDIedw== 941 | 942 | "@parcel/watcher-linux-x64-glibc@2.3.0": 943 | version "2.3.0" 944 | resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.3.0.tgz#193dd1c798003cdb5a1e59470ff26300f418a943" 945 | integrity sha512-P7Wo91lKSeSgMTtG7CnBS6WrA5otr1K7shhSjKHNePVmfBHDoAOHYRXgUmhiNfbcGk0uMCHVcdbfxtuiZCHVow== 946 | 947 | "@parcel/watcher-linux-x64-musl@2.3.0": 948 | version "2.3.0" 949 | resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.3.0.tgz#6dbdb86d96e955ab0fe4a4b60734ec0025a689dd" 950 | integrity sha512-+kiRE1JIq8QdxzwoYY+wzBs9YbJ34guBweTK8nlzLKimn5EQ2b2FSC+tAOpq302BuIMjyuUGvBiUhEcLIGMQ5g== 951 | 952 | "@parcel/watcher-win32-arm64@2.3.0": 953 | version "2.3.0" 954 | resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.3.0.tgz#59da26a431da946e6c74fa6b0f30b120ea6650b6" 955 | integrity sha512-35gXCnaz1AqIXpG42evcoP2+sNL62gZTMZne3IackM+6QlfMcJLy3DrjuL6Iks7Czpd3j4xRBzez3ADCj1l7Aw== 956 | 957 | "@parcel/watcher-win32-ia32@2.3.0": 958 | version "2.3.0" 959 | resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.3.0.tgz#3ee6a18b08929cd3b788e8cc9547fd9a540c013a" 960 | integrity sha512-FJS/IBQHhRpZ6PiCjFt1UAcPr0YmCLHRbTc00IBTrelEjlmmgIVLeOx4MSXzx2HFEy5Jo5YdhGpxCuqCyDJ5ow== 961 | 962 | "@parcel/watcher-win32-x64@2.3.0": 963 | version "2.3.0" 964 | resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.3.0.tgz#14e7246289861acc589fd608de39fe5d8b4bb0a7" 965 | integrity sha512-dLx+0XRdMnVI62kU3wbXvbIRhLck4aE28bIGKbRGS7BJNt54IIj9+c/Dkqb+7DJEbHUZAX1bwaoM8PqVlHJmCA== 966 | 967 | "@parcel/watcher@^2.0.7": 968 | version "2.3.0" 969 | resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.3.0.tgz#803517abbc3981a1a1221791d9f59dc0590d50f9" 970 | integrity sha512-pW7QaFiL11O0BphO+bq3MgqeX/INAk9jgBldVDYjlQPO4VddoZnF22TcF9onMhnLVHuNqBJeRf+Fj7eezi/+rQ== 971 | dependencies: 972 | detect-libc "^1.0.3" 973 | is-glob "^4.0.3" 974 | micromatch "^4.0.5" 975 | node-addon-api "^7.0.0" 976 | optionalDependencies: 977 | "@parcel/watcher-android-arm64" "2.3.0" 978 | "@parcel/watcher-darwin-arm64" "2.3.0" 979 | "@parcel/watcher-darwin-x64" "2.3.0" 980 | "@parcel/watcher-freebsd-x64" "2.3.0" 981 | "@parcel/watcher-linux-arm-glibc" "2.3.0" 982 | "@parcel/watcher-linux-arm64-glibc" "2.3.0" 983 | "@parcel/watcher-linux-arm64-musl" "2.3.0" 984 | "@parcel/watcher-linux-x64-glibc" "2.3.0" 985 | "@parcel/watcher-linux-x64-musl" "2.3.0" 986 | "@parcel/watcher-win32-arm64" "2.3.0" 987 | "@parcel/watcher-win32-ia32" "2.3.0" 988 | "@parcel/watcher-win32-x64" "2.3.0" 989 | 990 | "@parcel/workers@2.10.3": 991 | version "2.10.3" 992 | resolved "https://registry.yarnpkg.com/@parcel/workers/-/workers-2.10.3.tgz#2c4b674f3485124b56b584358ae38034f20d649f" 993 | integrity sha512-qlN8G3VybPHVIbD6fsZr2gmrXG2UlROUQIPW/kkAvjQ29uRfFn7YEC8CHTICt8M1HhCNkr0cMXkuXQBi0l3kAg== 994 | dependencies: 995 | "@parcel/diagnostic" "2.10.3" 996 | "@parcel/logger" "2.10.3" 997 | "@parcel/profiler" "2.10.3" 998 | "@parcel/types" "2.10.3" 999 | "@parcel/utils" "2.10.3" 1000 | nullthrows "^1.1.1" 1001 | 1002 | "@swc/core-darwin-arm64@1.3.100": 1003 | version "1.3.100" 1004 | resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.100.tgz#f582c5bbc9c49506f728fc1d14dff33c2cc226d5" 1005 | integrity sha512-XVWFsKe6ei+SsDbwmsuRkYck1SXRpO60Hioa4hoLwR8fxbA9eVp6enZtMxzVVMBi8ej5seZ4HZQeAWepbukiBw== 1006 | 1007 | "@swc/core-darwin-x64@1.3.100": 1008 | version "1.3.100" 1009 | resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.100.tgz#d84f5c0bb4603c252884d011a698ed7c634b1505" 1010 | integrity sha512-KF/MXrnH1nakm1wbt4XV8FS7kvqD9TGmVxeJ0U4bbvxXMvzeYUurzg3AJUTXYmXDhH/VXOYJE5N5RkwZZPs5iA== 1011 | 1012 | "@swc/core-linux-arm64-gnu@1.3.100": 1013 | version "1.3.100" 1014 | resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.100.tgz#1ed4b92b373882d8f338c4e0a0aa64cdaa6106f1" 1015 | integrity sha512-p8hikNnAEJrw5vHCtKiFT4hdlQxk1V7vqPmvUDgL/qe2menQDK/i12tbz7/3BEQ4UqUPnvwpmVn2d19RdEMNxw== 1016 | 1017 | "@swc/core-linux-arm64-musl@1.3.100": 1018 | version "1.3.100" 1019 | resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.100.tgz#9db560f7459e42e65ec02670d6a8316e7c850cfc" 1020 | integrity sha512-BWx/0EeY89WC4q3AaIaBSGfQxkYxIlS3mX19dwy2FWJs/O+fMvF9oLk/CyJPOZzbp+1DjGeeoGFuDYpiNO91JA== 1021 | 1022 | "@swc/core-linux-x64-gnu@1.3.100": 1023 | version "1.3.100" 1024 | resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.100.tgz#228826ea48879bf1e73683fbef4373e3e762e424" 1025 | integrity sha512-XUdGu3dxAkjsahLYnm8WijPfKebo+jHgHphDxaW0ovI6sTdmEGFDew7QzKZRlbYL2jRkUuuKuDGvD6lO5frmhA== 1026 | 1027 | "@swc/core-linux-x64-musl@1.3.100": 1028 | version "1.3.100" 1029 | resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.100.tgz#09a234dbbf625d071ecb663680e997a62d230d49" 1030 | integrity sha512-PhoXKf+f0OaNW/GCuXjJ0/KfK9EJX7z2gko+7nVnEA0p3aaPtbP6cq1Ubbl6CMoPL+Ci3gZ7nYumDqXNc3CtLQ== 1031 | 1032 | "@swc/core-win32-arm64-msvc@1.3.100": 1033 | version "1.3.100" 1034 | resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.100.tgz#add1c82884c10a9054ed6a48f884097aa85c6d2b" 1035 | integrity sha512-PwLADZN6F9cXn4Jw52FeP/MCLVHm8vwouZZSOoOScDtihjY495SSjdPnlosMaRSR4wJQssGwiD/4MbpgQPqbAw== 1036 | 1037 | "@swc/core-win32-ia32-msvc@1.3.100": 1038 | version "1.3.100" 1039 | resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.100.tgz#e0b6c5ae7f3250adeeb88dae83558d3f45148c56" 1040 | integrity sha512-0f6nicKSLlDKlyPRl2JEmkpBV4aeDfRQg6n8mPqgL7bliZIcDahG0ej+HxgNjZfS3e0yjDxsNRa6sAqWU2Z60A== 1041 | 1042 | "@swc/core-win32-x64-msvc@1.3.100": 1043 | version "1.3.100" 1044 | resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.100.tgz#34721dff151d7dcf165675f18aeed0a12264d88c" 1045 | integrity sha512-b7J0rPoMkRTa3XyUGt8PwCaIBuYWsL2DqbirrQKRESzgCvif5iNpqaM6kjIjI/5y5q1Ycv564CB51YDpiS8EtQ== 1046 | 1047 | "@swc/core@^1.3.36": 1048 | version "1.3.100" 1049 | resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.100.tgz#8fa36f26a35137620234b084224c9fa9b8a0fee2" 1050 | integrity sha512-7dKgTyxJjlrMwFZYb1auj3Xq0D8ZBe+5oeIgfMlRU05doXZypYJe0LAk0yjj3WdbwYzpF+T1PLxwTWizI0pckw== 1051 | dependencies: 1052 | "@swc/counter" "^0.1.1" 1053 | "@swc/types" "^0.1.5" 1054 | optionalDependencies: 1055 | "@swc/core-darwin-arm64" "1.3.100" 1056 | "@swc/core-darwin-x64" "1.3.100" 1057 | "@swc/core-linux-arm64-gnu" "1.3.100" 1058 | "@swc/core-linux-arm64-musl" "1.3.100" 1059 | "@swc/core-linux-x64-gnu" "1.3.100" 1060 | "@swc/core-linux-x64-musl" "1.3.100" 1061 | "@swc/core-win32-arm64-msvc" "1.3.100" 1062 | "@swc/core-win32-ia32-msvc" "1.3.100" 1063 | "@swc/core-win32-x64-msvc" "1.3.100" 1064 | 1065 | "@swc/counter@^0.1.1": 1066 | version "0.1.2" 1067 | resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.2.tgz#bf06d0770e47c6f1102270b744e17b934586985e" 1068 | integrity sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw== 1069 | 1070 | "@swc/helpers@^0.5.0": 1071 | version "0.5.3" 1072 | resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.3.tgz#98c6da1e196f5f08f977658b80d6bd941b5f294f" 1073 | integrity sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A== 1074 | dependencies: 1075 | tslib "^2.4.0" 1076 | 1077 | "@swc/types@^0.1.5": 1078 | version "0.1.5" 1079 | resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.5.tgz#043b731d4f56a79b4897a3de1af35e75d56bc63a" 1080 | integrity sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw== 1081 | 1082 | "@trysound/sax@0.2.0": 1083 | version "0.2.0" 1084 | resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" 1085 | integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== 1086 | 1087 | "@types/tampermonkey@^5.0.2": 1088 | version "5.0.2" 1089 | resolved "https://registry.yarnpkg.com/@types/tampermonkey/-/tampermonkey-5.0.2.tgz#667c94cf58bfed3e2471aeb887fb2f8da08dee79" 1090 | integrity sha512-keKnYemqWts68wO2+TBdEg84iQd5vymK5SEQGxitI9uOfOnjm/ZskBoK9ZH3mnSYp79HidZMA/Y7ODQtiA/VIg== 1091 | 1092 | abortcontroller-polyfill@^1.1.9: 1093 | version "1.7.5" 1094 | resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" 1095 | integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== 1096 | 1097 | acorn@^8.8.2: 1098 | version "8.11.2" 1099 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" 1100 | integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== 1101 | 1102 | ansi-styles@^3.2.1: 1103 | version "3.2.1" 1104 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 1105 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 1106 | dependencies: 1107 | color-convert "^1.9.0" 1108 | 1109 | ansi-styles@^4.1.0: 1110 | version "4.3.0" 1111 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 1112 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 1113 | dependencies: 1114 | color-convert "^2.0.1" 1115 | 1116 | argparse@^2.0.1: 1117 | version "2.0.1" 1118 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 1119 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 1120 | 1121 | babel-plugin-transform-remove-console@^6.9.4: 1122 | version "6.9.4" 1123 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz#b980360c067384e24b357a588d807d3c83527780" 1124 | integrity sha512-88blrUrMX3SPiGkT1GnvVY8E/7A+k6oj3MNvUtTIxJflFzXTw1bHkuJ/y039ouhFMp2prRn5cQGzokViYi1dsg== 1125 | 1126 | base-x@^3.0.8: 1127 | version "3.0.9" 1128 | resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" 1129 | integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== 1130 | dependencies: 1131 | safe-buffer "^5.0.1" 1132 | 1133 | boolbase@^1.0.0: 1134 | version "1.0.0" 1135 | resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" 1136 | integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== 1137 | 1138 | braces@^3.0.2: 1139 | version "3.0.2" 1140 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 1141 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 1142 | dependencies: 1143 | fill-range "^7.0.1" 1144 | 1145 | browserslist@^4.22.2, browserslist@^4.6.6: 1146 | version "4.22.2" 1147 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" 1148 | integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== 1149 | dependencies: 1150 | caniuse-lite "^1.0.30001565" 1151 | electron-to-chromium "^1.4.601" 1152 | node-releases "^2.0.14" 1153 | update-browserslist-db "^1.0.13" 1154 | 1155 | buffer-from@^1.0.0: 1156 | version "1.1.2" 1157 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 1158 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 1159 | 1160 | callsites@^3.0.0: 1161 | version "3.1.0" 1162 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 1163 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 1164 | 1165 | caniuse-lite@^1.0.30001565: 1166 | version "1.0.30001570" 1167 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz#b4e5c1fa786f733ab78fc70f592df6b3f23244ca" 1168 | integrity sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw== 1169 | 1170 | chalk@^2.4.2: 1171 | version "2.4.2" 1172 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 1173 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 1174 | dependencies: 1175 | ansi-styles "^3.2.1" 1176 | escape-string-regexp "^1.0.5" 1177 | supports-color "^5.3.0" 1178 | 1179 | chalk@^4.1.0: 1180 | version "4.1.2" 1181 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 1182 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 1183 | dependencies: 1184 | ansi-styles "^4.1.0" 1185 | supports-color "^7.1.0" 1186 | 1187 | chrome-trace-event@^1.0.2, chrome-trace-event@^1.0.3: 1188 | version "1.0.3" 1189 | resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" 1190 | integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== 1191 | 1192 | clone@^2.1.1: 1193 | version "2.1.2" 1194 | resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" 1195 | integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== 1196 | 1197 | color-convert@^1.9.0: 1198 | version "1.9.3" 1199 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 1200 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 1201 | dependencies: 1202 | color-name "1.1.3" 1203 | 1204 | color-convert@^2.0.1: 1205 | version "2.0.1" 1206 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 1207 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 1208 | dependencies: 1209 | color-name "~1.1.4" 1210 | 1211 | color-name@1.1.3: 1212 | version "1.1.3" 1213 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 1214 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 1215 | 1216 | color-name@~1.1.4: 1217 | version "1.1.4" 1218 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 1219 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 1220 | 1221 | commander@^2.20.0: 1222 | version "2.20.3" 1223 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 1224 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 1225 | 1226 | commander@^7.0.0, commander@^7.2.0: 1227 | version "7.2.0" 1228 | resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" 1229 | integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== 1230 | 1231 | convert-source-map@^2.0.0: 1232 | version "2.0.0" 1233 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" 1234 | integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== 1235 | 1236 | copy-anything@^2.0.1: 1237 | version "2.0.6" 1238 | resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480" 1239 | integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw== 1240 | dependencies: 1241 | is-what "^3.14.1" 1242 | 1243 | cosmiconfig@^8.0.0: 1244 | version "8.3.6" 1245 | resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" 1246 | integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== 1247 | dependencies: 1248 | import-fresh "^3.3.0" 1249 | js-yaml "^4.1.0" 1250 | parse-json "^5.2.0" 1251 | path-type "^4.0.0" 1252 | 1253 | css-select@^4.1.3: 1254 | version "4.3.0" 1255 | resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" 1256 | integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== 1257 | dependencies: 1258 | boolbase "^1.0.0" 1259 | css-what "^6.0.1" 1260 | domhandler "^4.3.1" 1261 | domutils "^2.8.0" 1262 | nth-check "^2.0.1" 1263 | 1264 | css-tree@^1.1.2, css-tree@^1.1.3: 1265 | version "1.1.3" 1266 | resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" 1267 | integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== 1268 | dependencies: 1269 | mdn-data "2.0.14" 1270 | source-map "^0.6.1" 1271 | 1272 | css-what@^6.0.1: 1273 | version "6.1.0" 1274 | resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" 1275 | integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== 1276 | 1277 | csso@^4.2.0: 1278 | version "4.2.0" 1279 | resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" 1280 | integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== 1281 | dependencies: 1282 | css-tree "^1.1.2" 1283 | 1284 | debug@^4.1.0, debug@^4.3.1: 1285 | version "4.3.4" 1286 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 1287 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 1288 | dependencies: 1289 | ms "2.1.2" 1290 | 1291 | detect-libc@^1.0.3: 1292 | version "1.0.3" 1293 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 1294 | integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== 1295 | 1296 | detect-libc@^2.0.1: 1297 | version "2.0.2" 1298 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" 1299 | integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== 1300 | 1301 | dom-serializer@^1.0.1: 1302 | version "1.4.1" 1303 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" 1304 | integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== 1305 | dependencies: 1306 | domelementtype "^2.0.1" 1307 | domhandler "^4.2.0" 1308 | entities "^2.0.0" 1309 | 1310 | domelementtype@^2.0.1, domelementtype@^2.2.0: 1311 | version "2.3.0" 1312 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" 1313 | integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== 1314 | 1315 | domhandler@^4.2.0, domhandler@^4.2.2, domhandler@^4.3.1: 1316 | version "4.3.1" 1317 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" 1318 | integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== 1319 | dependencies: 1320 | domelementtype "^2.2.0" 1321 | 1322 | domutils@^2.8.0: 1323 | version "2.8.0" 1324 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" 1325 | integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== 1326 | dependencies: 1327 | dom-serializer "^1.0.1" 1328 | domelementtype "^2.2.0" 1329 | domhandler "^4.2.0" 1330 | 1331 | dotenv-expand@^5.1.0: 1332 | version "5.1.0" 1333 | resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" 1334 | integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== 1335 | 1336 | dotenv@^7.0.0: 1337 | version "7.0.0" 1338 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c" 1339 | integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== 1340 | 1341 | electron-to-chromium@^1.4.601: 1342 | version "1.4.614" 1343 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.614.tgz#2fe789d61fa09cb875569f37c309d0c2701f91c0" 1344 | integrity sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ== 1345 | 1346 | entities@^2.0.0: 1347 | version "2.2.0" 1348 | resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" 1349 | integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== 1350 | 1351 | entities@^3.0.1: 1352 | version "3.0.1" 1353 | resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" 1354 | integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== 1355 | 1356 | errno@^0.1.1: 1357 | version "0.1.8" 1358 | resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" 1359 | integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== 1360 | dependencies: 1361 | prr "~1.0.1" 1362 | 1363 | error-ex@^1.3.1: 1364 | version "1.3.2" 1365 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 1366 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 1367 | dependencies: 1368 | is-arrayish "^0.2.1" 1369 | 1370 | escalade@^3.1.1: 1371 | version "3.1.1" 1372 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 1373 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 1374 | 1375 | escape-string-regexp@^1.0.5: 1376 | version "1.0.5" 1377 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1378 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 1379 | 1380 | fill-range@^7.0.1: 1381 | version "7.0.1" 1382 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1383 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1384 | dependencies: 1385 | to-regex-range "^5.0.1" 1386 | 1387 | gensync@^1.0.0-beta.2: 1388 | version "1.0.0-beta.2" 1389 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 1390 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 1391 | 1392 | get-port@^4.2.0: 1393 | version "4.2.0" 1394 | resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" 1395 | integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== 1396 | 1397 | globals@^11.1.0: 1398 | version "11.12.0" 1399 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1400 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1401 | 1402 | globals@^13.2.0: 1403 | version "13.24.0" 1404 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" 1405 | integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== 1406 | dependencies: 1407 | type-fest "^0.20.2" 1408 | 1409 | graceful-fs@^4.1.2: 1410 | version "4.2.11" 1411 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" 1412 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 1413 | 1414 | has-flag@^3.0.0: 1415 | version "3.0.0" 1416 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1417 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 1418 | 1419 | has-flag@^4.0.0: 1420 | version "4.0.0" 1421 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1422 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1423 | 1424 | htmlnano@^2.0.0: 1425 | version "2.1.0" 1426 | resolved "https://registry.yarnpkg.com/htmlnano/-/htmlnano-2.1.0.tgz#67b31b3cd3fad23f0b610ca628fdb48382209c3c" 1427 | integrity sha512-jVGRE0Ep9byMBKEu0Vxgl8dhXYOUk0iNQ2pjsG+BcRB0u0oDF5A9p/iBGMg/PGKYUyMD0OAGu8dVT5Lzj8S58g== 1428 | dependencies: 1429 | cosmiconfig "^8.0.0" 1430 | posthtml "^0.16.5" 1431 | timsort "^0.3.0" 1432 | 1433 | htmlparser2@^7.1.1: 1434 | version "7.2.0" 1435 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-7.2.0.tgz#8817cdea38bbc324392a90b1990908e81a65f5a5" 1436 | integrity sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog== 1437 | dependencies: 1438 | domelementtype "^2.0.1" 1439 | domhandler "^4.2.2" 1440 | domutils "^2.8.0" 1441 | entities "^3.0.1" 1442 | 1443 | iconv-lite@^0.6.3: 1444 | version "0.6.3" 1445 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" 1446 | integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== 1447 | dependencies: 1448 | safer-buffer ">= 2.1.2 < 3.0.0" 1449 | 1450 | image-size@~0.5.0: 1451 | version "0.5.5" 1452 | resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" 1453 | integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ== 1454 | 1455 | import-fresh@^3.3.0: 1456 | version "3.3.0" 1457 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1458 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1459 | dependencies: 1460 | parent-module "^1.0.0" 1461 | resolve-from "^4.0.0" 1462 | 1463 | is-arrayish@^0.2.1: 1464 | version "0.2.1" 1465 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1466 | integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== 1467 | 1468 | is-extglob@^2.1.1: 1469 | version "2.1.1" 1470 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1471 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1472 | 1473 | is-glob@^4.0.3: 1474 | version "4.0.3" 1475 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1476 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1477 | dependencies: 1478 | is-extglob "^2.1.1" 1479 | 1480 | is-json@^2.0.1: 1481 | version "2.0.1" 1482 | resolved "https://registry.yarnpkg.com/is-json/-/is-json-2.0.1.tgz#6be166d144828a131d686891b983df62c39491ff" 1483 | integrity sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA== 1484 | 1485 | is-number@^7.0.0: 1486 | version "7.0.0" 1487 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1488 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1489 | 1490 | is-what@^3.14.1: 1491 | version "3.14.1" 1492 | resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" 1493 | integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== 1494 | 1495 | js-tokens@^4.0.0: 1496 | version "4.0.0" 1497 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1498 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1499 | 1500 | js-yaml@^4.1.0: 1501 | version "4.1.0" 1502 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1503 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1504 | dependencies: 1505 | argparse "^2.0.1" 1506 | 1507 | jsesc@^2.5.1: 1508 | version "2.5.2" 1509 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1510 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 1511 | 1512 | json-parse-even-better-errors@^2.3.0: 1513 | version "2.3.1" 1514 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 1515 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 1516 | 1517 | json5@^2.2.0, json5@^2.2.1, json5@^2.2.3: 1518 | version "2.2.3" 1519 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" 1520 | integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== 1521 | 1522 | less@^4.1.1: 1523 | version "4.2.0" 1524 | resolved "https://registry.yarnpkg.com/less/-/less-4.2.0.tgz#cbefbfaa14a4cd388e2099b2b51f956e1465c450" 1525 | integrity sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA== 1526 | dependencies: 1527 | copy-anything "^2.0.1" 1528 | parse-node-version "^1.0.1" 1529 | tslib "^2.3.0" 1530 | optionalDependencies: 1531 | errno "^0.1.1" 1532 | graceful-fs "^4.1.2" 1533 | image-size "~0.5.0" 1534 | make-dir "^2.1.0" 1535 | mime "^1.4.1" 1536 | needle "^3.1.0" 1537 | source-map "~0.6.0" 1538 | 1539 | lightningcss-darwin-arm64@1.22.1: 1540 | version "1.22.1" 1541 | resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.22.1.tgz#c03c042335fd7e9e1f45c977b39ff6886b8b064f" 1542 | integrity sha512-ldvElu+R0QimNTjsKpaZkUv3zf+uefzLy/R1R19jtgOfSRM+zjUCUgDhfEDRmVqJtMwYsdhMI2aJtJChPC6Osg== 1543 | 1544 | lightningcss-darwin-x64@1.22.1: 1545 | version "1.22.1" 1546 | resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.22.1.tgz#cdd380006a176b7faea83d1d642d9c5d65620f74" 1547 | integrity sha512-5p2rnlVTv6Gpw4PlTLq925nTVh+HFh4MpegX8dPDYJae+NFVjQ67gY7O6iHIzQjLipDiYejFF0yHrhjU3XgLBQ== 1548 | 1549 | lightningcss-freebsd-x64@1.22.1: 1550 | version "1.22.1" 1551 | resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.22.1.tgz#dd1b19308e3b0f24b6f79da10fd3975e5e02ebda" 1552 | integrity sha512-1FaBtcFrZqB2hkFbAxY//Pnp8koThvyB6AhjbdVqKD4/pu13Rl91fKt2N9qyeQPUt3xy7ORUvSO+dPk3J6EjXg== 1553 | 1554 | lightningcss-linux-arm-gnueabihf@1.22.1: 1555 | version "1.22.1" 1556 | resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.22.1.tgz#134cf9b41abd44ec53d8bae02c9f6e4f257eb617" 1557 | integrity sha512-6rub98tYGfE5I5j0BP8t/2d4BZyu1S7Iz9vUkm0H26snAFHYxLfj3RbQn0xHHIePSetjLnhcg3QlfwUAkD/FYg== 1558 | 1559 | lightningcss-linux-arm64-gnu@1.22.1: 1560 | version "1.22.1" 1561 | resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.22.1.tgz#33800723fb3d782c71cc131cf38ca678a0e9d1fa" 1562 | integrity sha512-nYO5qGtb/1kkTZu3FeTiM+2B2TAb7m2DkLCTgQIs2bk2o9aEs7I96fwySKcoHWQAiQDGR9sMux9vkV4KQXqPaQ== 1563 | 1564 | lightningcss-linux-arm64-musl@1.22.1: 1565 | version "1.22.1" 1566 | resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.22.1.tgz#cff86acaa98a0245add5a333098befc894802137" 1567 | integrity sha512-MCV6RuRpzXbunvzwY644iz8cw4oQxvW7oer9xPkdadYqlEyiJJ6wl7FyJOH7Q6ZYH4yjGAUCvxDBxPbnDu9ZVg== 1568 | 1569 | lightningcss-linux-x64-gnu@1.22.1: 1570 | version "1.22.1" 1571 | resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.22.1.tgz#3f68602228b49d661db0692548e061456b603ca2" 1572 | integrity sha512-RjNgpdM20VUXgV7us/VmlO3Vn2ZRiDnc3/bUxCVvySZWPiVPprpqW/QDWuzkGa+NCUf6saAM5CLsZLSxncXJwg== 1573 | 1574 | lightningcss-linux-x64-musl@1.22.1: 1575 | version "1.22.1" 1576 | resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.22.1.tgz#e713e56798f8a50df3e3f285ef102191a01ef951" 1577 | integrity sha512-ZgO4C7Rd6Hv/5MnyY2KxOYmIlzk4rplVolDt3NbkNR8DndnyX0Q5IR4acJWNTBICQ21j3zySzKbcJaiJpk/4YA== 1578 | 1579 | lightningcss-win32-x64-msvc@1.22.1: 1580 | version "1.22.1" 1581 | resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.22.1.tgz#48b141554bf05cc4338f064b6892dd5dd16185ef" 1582 | integrity sha512-4pozV4eyD0MDET41ZLHAeBo+H04Nm2UEYIk5w/ts40231dRFV7E0cjwbnZvSoc1DXFgecAhiC0L16ruv/ZDCpg== 1583 | 1584 | lightningcss@^1.16.1: 1585 | version "1.22.1" 1586 | resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.22.1.tgz#8108ddecb2e859032bdd99908abd2b37515b1750" 1587 | integrity sha512-Fy45PhibiNXkm0cK5FJCbfO8Y6jUpD/YcHf/BtuI+jvYYqSXKF4muk61jjE8YxCR9y+hDYIWSzHTc+bwhDE6rQ== 1588 | dependencies: 1589 | detect-libc "^1.0.3" 1590 | optionalDependencies: 1591 | lightningcss-darwin-arm64 "1.22.1" 1592 | lightningcss-darwin-x64 "1.22.1" 1593 | lightningcss-freebsd-x64 "1.22.1" 1594 | lightningcss-linux-arm-gnueabihf "1.22.1" 1595 | lightningcss-linux-arm64-gnu "1.22.1" 1596 | lightningcss-linux-arm64-musl "1.22.1" 1597 | lightningcss-linux-x64-gnu "1.22.1" 1598 | lightningcss-linux-x64-musl "1.22.1" 1599 | lightningcss-win32-x64-msvc "1.22.1" 1600 | 1601 | lines-and-columns@^1.1.6: 1602 | version "1.2.4" 1603 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" 1604 | integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== 1605 | 1606 | lmdb@2.8.5: 1607 | version "2.8.5" 1608 | resolved "https://registry.yarnpkg.com/lmdb/-/lmdb-2.8.5.tgz#ce191110c755c0951caa062722e300c703973837" 1609 | integrity sha512-9bMdFfc80S+vSldBmG3HOuLVHnxRdNTlpzR6QDnzqCQtCzGUEAGTzBKYMeIM+I/sU4oZfgbcbS7X7F65/z/oxQ== 1610 | dependencies: 1611 | msgpackr "^1.9.5" 1612 | node-addon-api "^6.1.0" 1613 | node-gyp-build-optional-packages "5.1.1" 1614 | ordered-binary "^1.4.1" 1615 | weak-lru-cache "^1.2.2" 1616 | optionalDependencies: 1617 | "@lmdb/lmdb-darwin-arm64" "2.8.5" 1618 | "@lmdb/lmdb-darwin-x64" "2.8.5" 1619 | "@lmdb/lmdb-linux-arm" "2.8.5" 1620 | "@lmdb/lmdb-linux-arm64" "2.8.5" 1621 | "@lmdb/lmdb-linux-x64" "2.8.5" 1622 | "@lmdb/lmdb-win32-x64" "2.8.5" 1623 | 1624 | lru-cache@^5.1.1: 1625 | version "5.1.1" 1626 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" 1627 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== 1628 | dependencies: 1629 | yallist "^3.0.2" 1630 | 1631 | lru-cache@^6.0.0: 1632 | version "6.0.0" 1633 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1634 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1635 | dependencies: 1636 | yallist "^4.0.0" 1637 | 1638 | make-dir@^2.1.0: 1639 | version "2.1.0" 1640 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" 1641 | integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== 1642 | dependencies: 1643 | pify "^4.0.1" 1644 | semver "^5.6.0" 1645 | 1646 | mdn-data@2.0.14: 1647 | version "2.0.14" 1648 | resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" 1649 | integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== 1650 | 1651 | micromatch@^4.0.5: 1652 | version "4.0.5" 1653 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 1654 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1655 | dependencies: 1656 | braces "^3.0.2" 1657 | picomatch "^2.3.1" 1658 | 1659 | mime@^1.4.1: 1660 | version "1.6.0" 1661 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 1662 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 1663 | 1664 | ms@2.1.2: 1665 | version "2.1.2" 1666 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1667 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1668 | 1669 | msgpackr-extract@^3.0.2: 1670 | version "3.0.2" 1671 | resolved "https://registry.yarnpkg.com/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz#e05ec1bb4453ddf020551bcd5daaf0092a2c279d" 1672 | integrity sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A== 1673 | dependencies: 1674 | node-gyp-build-optional-packages "5.0.7" 1675 | optionalDependencies: 1676 | "@msgpackr-extract/msgpackr-extract-darwin-arm64" "3.0.2" 1677 | "@msgpackr-extract/msgpackr-extract-darwin-x64" "3.0.2" 1678 | "@msgpackr-extract/msgpackr-extract-linux-arm" "3.0.2" 1679 | "@msgpackr-extract/msgpackr-extract-linux-arm64" "3.0.2" 1680 | "@msgpackr-extract/msgpackr-extract-linux-x64" "3.0.2" 1681 | "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.2" 1682 | 1683 | msgpackr@^1.9.5, msgpackr@^1.9.9: 1684 | version "1.10.0" 1685 | resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.10.0.tgz#adbca9c951f06647a808f76bc00a519cf6f7fbe4" 1686 | integrity sha512-rVQ5YAQDoZKZLX+h8tNq7FiHrPJoeGHViz3U4wIcykhAEpwF/nH2Vbk8dQxmpX5JavkI8C7pt4bnkJ02ZmRoUw== 1687 | optionalDependencies: 1688 | msgpackr-extract "^3.0.2" 1689 | 1690 | needle@^3.1.0: 1691 | version "3.3.1" 1692 | resolved "https://registry.yarnpkg.com/needle/-/needle-3.3.1.tgz#63f75aec580c2e77e209f3f324e2cdf3d29bd049" 1693 | integrity sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q== 1694 | dependencies: 1695 | iconv-lite "^0.6.3" 1696 | sax "^1.2.4" 1697 | 1698 | node-addon-api@^6.1.0: 1699 | version "6.1.0" 1700 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" 1701 | integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== 1702 | 1703 | node-addon-api@^7.0.0: 1704 | version "7.0.0" 1705 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.0.0.tgz#8136add2f510997b3b94814f4af1cce0b0e3962e" 1706 | integrity sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA== 1707 | 1708 | node-gyp-build-optional-packages@5.0.7: 1709 | version "5.0.7" 1710 | resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz#5d2632bbde0ab2f6e22f1bbac2199b07244ae0b3" 1711 | integrity sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w== 1712 | 1713 | node-gyp-build-optional-packages@5.1.1: 1714 | version "5.1.1" 1715 | resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.1.1.tgz#52b143b9dd77b7669073cbfe39e3f4118bfc603c" 1716 | integrity sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw== 1717 | dependencies: 1718 | detect-libc "^2.0.1" 1719 | 1720 | node-releases@^2.0.14: 1721 | version "2.0.14" 1722 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" 1723 | integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== 1724 | 1725 | nth-check@^2.0.1: 1726 | version "2.1.1" 1727 | resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" 1728 | integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== 1729 | dependencies: 1730 | boolbase "^1.0.0" 1731 | 1732 | nullthrows@^1.1.1: 1733 | version "1.1.1" 1734 | resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" 1735 | integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== 1736 | 1737 | ordered-binary@^1.4.1: 1738 | version "1.5.1" 1739 | resolved "https://registry.yarnpkg.com/ordered-binary/-/ordered-binary-1.5.1.tgz#94ccbf14181711081ee23931db0dc3f58aaa0df6" 1740 | integrity sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A== 1741 | 1742 | parcel@^2.10.3: 1743 | version "2.10.3" 1744 | resolved "https://registry.yarnpkg.com/parcel/-/parcel-2.10.3.tgz#f91a0c98896df98ca857505ea2d1c0dcb0560a01" 1745 | integrity sha512-Ocx33N4ZVnotJTALhMZ0AqPIE9UN5uP6jjA+lYJ4FlEYuYYZsvOQXZQgeMa62pFj6jrOHWh7ho8uJhRdTNwVyg== 1746 | dependencies: 1747 | "@parcel/config-default" "2.10.3" 1748 | "@parcel/core" "2.10.3" 1749 | "@parcel/diagnostic" "2.10.3" 1750 | "@parcel/events" "2.10.3" 1751 | "@parcel/fs" "2.10.3" 1752 | "@parcel/logger" "2.10.3" 1753 | "@parcel/package-manager" "2.10.3" 1754 | "@parcel/reporter-cli" "2.10.3" 1755 | "@parcel/reporter-dev-server" "2.10.3" 1756 | "@parcel/reporter-tracer" "2.10.3" 1757 | "@parcel/utils" "2.10.3" 1758 | chalk "^4.1.0" 1759 | commander "^7.0.0" 1760 | get-port "^4.2.0" 1761 | 1762 | parent-module@^1.0.0: 1763 | version "1.0.1" 1764 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1765 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1766 | dependencies: 1767 | callsites "^3.0.0" 1768 | 1769 | parse-json@^5.2.0: 1770 | version "5.2.0" 1771 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" 1772 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== 1773 | dependencies: 1774 | "@babel/code-frame" "^7.0.0" 1775 | error-ex "^1.3.1" 1776 | json-parse-even-better-errors "^2.3.0" 1777 | lines-and-columns "^1.1.6" 1778 | 1779 | parse-node-version@^1.0.1: 1780 | version "1.0.1" 1781 | resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" 1782 | integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== 1783 | 1784 | path-type@^4.0.0: 1785 | version "4.0.0" 1786 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1787 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1788 | 1789 | picocolors@^1.0.0: 1790 | version "1.0.0" 1791 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 1792 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 1793 | 1794 | picomatch@^2.3.1: 1795 | version "2.3.1" 1796 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1797 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1798 | 1799 | pify@^4.0.1: 1800 | version "4.0.1" 1801 | resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" 1802 | integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== 1803 | 1804 | postcss-value-parser@^4.2.0: 1805 | version "4.2.0" 1806 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" 1807 | integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== 1808 | 1809 | posthtml-parser@^0.10.1: 1810 | version "0.10.2" 1811 | resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.10.2.tgz#df364d7b179f2a6bf0466b56be7b98fd4e97c573" 1812 | integrity sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg== 1813 | dependencies: 1814 | htmlparser2 "^7.1.1" 1815 | 1816 | posthtml-parser@^0.11.0: 1817 | version "0.11.0" 1818 | resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.11.0.tgz#25d1c7bf811ea83559bc4c21c189a29747a24b7a" 1819 | integrity sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw== 1820 | dependencies: 1821 | htmlparser2 "^7.1.1" 1822 | 1823 | posthtml-render@^3.0.0: 1824 | version "3.0.0" 1825 | resolved "https://registry.yarnpkg.com/posthtml-render/-/posthtml-render-3.0.0.tgz#97be44931496f495b4f07b99e903cc70ad6a3205" 1826 | integrity sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA== 1827 | dependencies: 1828 | is-json "^2.0.1" 1829 | 1830 | posthtml@^0.16.4, posthtml@^0.16.5: 1831 | version "0.16.6" 1832 | resolved "https://registry.yarnpkg.com/posthtml/-/posthtml-0.16.6.tgz#e2fc407f67a64d2fa3567afe770409ffdadafe59" 1833 | integrity sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ== 1834 | dependencies: 1835 | posthtml-parser "^0.11.0" 1836 | posthtml-render "^3.0.0" 1837 | 1838 | prr@~1.0.1: 1839 | version "1.0.1" 1840 | resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" 1841 | integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== 1842 | 1843 | react-error-overlay@6.0.9: 1844 | version "6.0.9" 1845 | resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" 1846 | integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== 1847 | 1848 | react-refresh@^0.9.0: 1849 | version "0.9.0" 1850 | resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.9.0.tgz#71863337adc3e5c2f8a6bfddd12ae3bfe32aafbf" 1851 | integrity sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ== 1852 | 1853 | regenerator-runtime@^0.13.7: 1854 | version "0.13.11" 1855 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" 1856 | integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== 1857 | 1858 | resolve-from@^4.0.0: 1859 | version "4.0.0" 1860 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1861 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1862 | 1863 | safe-buffer@^5.0.1: 1864 | version "5.2.1" 1865 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1866 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1867 | 1868 | "safer-buffer@>= 2.1.2 < 3.0.0": 1869 | version "2.1.2" 1870 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1871 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1872 | 1873 | sax@^1.2.4: 1874 | version "1.3.0" 1875 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" 1876 | integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== 1877 | 1878 | semver@^5.6.0: 1879 | version "5.7.2" 1880 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" 1881 | integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== 1882 | 1883 | semver@^6.3.1: 1884 | version "6.3.1" 1885 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" 1886 | integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== 1887 | 1888 | semver@^7.5.2: 1889 | version "7.5.4" 1890 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" 1891 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== 1892 | dependencies: 1893 | lru-cache "^6.0.0" 1894 | 1895 | source-map-support@~0.5.20: 1896 | version "0.5.21" 1897 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 1898 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 1899 | dependencies: 1900 | buffer-from "^1.0.0" 1901 | source-map "^0.6.0" 1902 | 1903 | source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: 1904 | version "0.6.1" 1905 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1906 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1907 | 1908 | srcset@4: 1909 | version "4.0.0" 1910 | resolved "https://registry.yarnpkg.com/srcset/-/srcset-4.0.0.tgz#336816b665b14cd013ba545b6fe62357f86e65f4" 1911 | integrity sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw== 1912 | 1913 | stable@^0.1.8: 1914 | version "0.1.8" 1915 | resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" 1916 | integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== 1917 | 1918 | supports-color@^5.3.0: 1919 | version "5.5.0" 1920 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1921 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1922 | dependencies: 1923 | has-flag "^3.0.0" 1924 | 1925 | supports-color@^7.1.0: 1926 | version "7.2.0" 1927 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1928 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1929 | dependencies: 1930 | has-flag "^4.0.0" 1931 | 1932 | svgo@^2.4.0: 1933 | version "2.8.0" 1934 | resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" 1935 | integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== 1936 | dependencies: 1937 | "@trysound/sax" "0.2.0" 1938 | commander "^7.2.0" 1939 | css-select "^4.1.3" 1940 | css-tree "^1.1.3" 1941 | csso "^4.2.0" 1942 | picocolors "^1.0.0" 1943 | stable "^0.1.8" 1944 | 1945 | term-size@^2.2.1: 1946 | version "2.2.1" 1947 | resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" 1948 | integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== 1949 | 1950 | terser@^5.2.0: 1951 | version "5.26.0" 1952 | resolved "https://registry.yarnpkg.com/terser/-/terser-5.26.0.tgz#ee9f05d929f4189a9c28a0feb889d96d50126fe1" 1953 | integrity sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ== 1954 | dependencies: 1955 | "@jridgewell/source-map" "^0.3.3" 1956 | acorn "^8.8.2" 1957 | commander "^2.20.0" 1958 | source-map-support "~0.5.20" 1959 | 1960 | timsort@^0.3.0: 1961 | version "0.3.0" 1962 | resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" 1963 | integrity sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A== 1964 | 1965 | to-fast-properties@^2.0.0: 1966 | version "2.0.0" 1967 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 1968 | integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== 1969 | 1970 | to-regex-range@^5.0.1: 1971 | version "5.0.1" 1972 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1973 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1974 | dependencies: 1975 | is-number "^7.0.0" 1976 | 1977 | tslib@^2.3.0, tslib@^2.4.0: 1978 | version "2.6.2" 1979 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" 1980 | integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== 1981 | 1982 | type-fest@^0.20.2: 1983 | version "0.20.2" 1984 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 1985 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1986 | 1987 | update-browserslist-db@^1.0.13: 1988 | version "1.0.13" 1989 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" 1990 | integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== 1991 | dependencies: 1992 | escalade "^3.1.1" 1993 | picocolors "^1.0.0" 1994 | 1995 | utility-types@^3.10.0: 1996 | version "3.10.0" 1997 | resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" 1998 | integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== 1999 | 2000 | weak-lru-cache@^1.2.2: 2001 | version "1.2.2" 2002 | resolved "https://registry.yarnpkg.com/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz#fdbb6741f36bae9540d12f480ce8254060dccd19" 2003 | integrity sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw== 2004 | 2005 | yallist@^3.0.2: 2006 | version "3.1.1" 2007 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" 2008 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== 2009 | 2010 | yallist@^4.0.0: 2011 | version "4.0.0" 2012 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 2013 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2014 | --------------------------------------------------------------------------------