From 1843cdb1d037c3098a9c889f992ca1947c32f267 Mon Sep 17 00:00:00 2001 From: Chris Allan Date: Thu, 25 Nov 2021 18:18:51 -0800 Subject: [PATCH 01/16] Working buttons --- scoresaber.user.js | 3971 ++++++++--------- src/api/scoresaber.ts | 6 +- src/compare.ts | 4 +- src/components/QuickButton.svelte | 1 + src/env.ts | 10 +- src/main.ts | 11 +- src/pages/song.ts | 6 +- src/pages/user.ts | 72 +- src/util/userscript.ts | 2 +- yarn.lock | 6724 ++++++++++++++--------------- 10 files changed, 5258 insertions(+), 5549 deletions(-) diff --git a/scoresaber.user.js b/scoresaber.user.js index 90ca8da..5bb5d1f 100644 --- a/scoresaber.user.js +++ b/scoresaber.user.js @@ -26,1195 +26,1018 @@ (function () { 'use strict'; - class Global { - } - Global.debug = false; - Global.scoresaber_link = "https://scoresaber.com"; - Global.beatsaver_link = "https://beatsaver.com/maps/"; - Global.bsaber_songs_link = "https://bsaber.com/songs/"; - Global.song_hash_reg = /\/([\da-zA-Z]{40})\.png/; - Global.score_reg = /(score|accuracy):\s*([\d.,]+)%?\s*(\(([\w,]*)\))?/; - Global.leaderboard_reg = /leaderboard\/(\d+)/; - Global.leaderboard_rank_reg = /#([\d,]+)/; - Global.leaderboard_country_reg = /(\?|&)country=(\w+)$/; - Global.user_reg = /u\/(\d+)/; - Global.script_version_reg = /\/\/\s*@version\s+([\d.]+)/; - Global.user_per_page_global_leaderboard = 50; - Global.user_per_page_song_leaderboard = 12; + class Global { + } + Global.debug = false; + Global.scoresaber_link = "https://scoresaber.com"; + Global.beatsaver_link = "https://beatsaver.com/maps/"; + Global.bsaber_songs_link = "https://bsaber.com/songs/"; + Global.song_hash_reg = /\/([\da-zA-Z]{40})\.png/; + Global.score_reg = /(score|accuracy):\s*([\d.,]+)%?\s*(\(([\w,]*)\))?/; + Global.leaderboard_reg = /leaderboard\/(\d+)/; + Global.leaderboard_rank_reg = /#([\d,]+)/; + Global.leaderboard_country_reg = /(\?|&)country=(\w+)$/; + Global.user_reg = /u\/(\d+)/; + Global.script_version_reg = /\/\/\s*@version\s+([\d.]+)/; + Global.user_per_page_global_leaderboard = 50; + Global.user_per_page_song_leaderboard = 12; Global.pp_weighting_factor = 0.965; - function create(tag, attrs, ...children) { - if (tag === undefined) - throw new Error("'tag' not defined"); - const ele = document.createElement(tag); - if (attrs) { - for (const [attrName, attrValue] of Object.entries(attrs)) { - if (attrName === "style") { - for (const [styleName, styleValue] of Object.entries(attrs.style)) { - ele.style[styleName] = styleValue; - } - } - else if (attrName === "class") { - if (typeof attrs.class === "string") { - const classes = attrs.class.split(/ /g).filter(c => c.trim().length > 0); - ele.classList.add(...classes); - } - else { - ele.classList.add(...attrs.class); - } - } - else if (attrName === "for") { - ele.htmlFor = attrValue; - } - else if (attrName === "selected") { - ele.selected = (attrValue ? "selected" : undefined); - } - else if (attrName === "disabled") { - if (attrValue) - ele.setAttribute("disabled", undefined); - } - else if (attrName === "data") { - const data_dict = attrs[attrName]; - for (const [data_key, data_value] of Object.entries(data_dict)) { - ele.dataset[data_key] = data_value; - } - } - else { - ele[attrName] = attrs[attrName]; - } - } - } - into(ele, ...children); - return ele; - } - function clear_children(elem) { - while (elem.lastChild) { - elem.removeChild(elem.lastChild); - } - } - function intor(parent, ...children) { - clear_children(parent); - return into(parent, ...children); - } - function into(parent, ...children) { - for (const child of children) { - if (typeof child === "string") { - if (children.length > 1) { - parent.appendChild(to_node(child)); - } - else { - parent.textContent = child; - } - } - else if ("then" in child) { - const dummy = document.createElement("DIV"); - parent.appendChild(dummy); - (async () => { - const node = await child; - parent.replaceChild(to_node(node), dummy); - })(); - } - else { - parent.appendChild(child); - } - } - return parent; - } - function to_node(elem) { - if (typeof elem === "string") { - const text_div = document.createElement("DIV"); - text_div.textContent = elem; - return text_div; - } - return elem; - } - function as_fragment(builder) { - const frag = document.createDocumentFragment(); - builder(frag); - return frag; - } - - function check(elem) { - if (elem === undefined || elem === null) { - throw new Error("Expected value to not be null"); - } - return elem; - } - - function get_user_header() { - return check(document.querySelector(".content div.columns h5")); - } - function get_navbar() { - return check(document.querySelector("#navMenu div.navbar-start")); - } - function is_user_page() { - return window.location.href.toLowerCase().startsWith(Global.scoresaber_link + "/u/"); - } - function is_song_leaderboard_page() { - return window.location.href.toLowerCase().startsWith(Global.scoresaber_link + "/leaderboard/"); - } - function get_current_user() { - if (Global._current_user) { - return Global._current_user; - } - if (!is_user_page()) { - throw new Error("Not on a user page"); - } - Global._current_user = get_document_user(document); - return Global._current_user; - } - function get_document_user(doc) { - const username_elem = check(doc.querySelector(".content .title a")); - const user_name = username_elem.innerText.trim(); - const user_id = Global.user_reg.exec(window.location.href)[1]; - return { id: user_id, name: user_name }; - } - function get_home_user() { - if (Global._home_user) { - return Global._home_user; - } - const json = localStorage.getItem("home_user"); - if (!json) { - return undefined; - } - Global._home_user = JSON.parse(json); - return Global._home_user; - } - function get_compare_user() { - if (Global.last_selected) { - return Global.last_selected; - } - const stored_last = localStorage.getItem("last_selected"); - if (stored_last) { - Global.last_selected = stored_last; - return Global.last_selected; - } - const compare = document.getElementById("user_compare"); - if (compare === null || compare === void 0 ? void 0 : compare.value) { - Global.last_selected = compare.value; - return Global.last_selected; - } - return undefined; - } - function insert_compare_feature(elem) { - if (!is_user_page()) { - throw Error("Invalid call to 'insert_compare_feature'"); - } - setup_compare_feature_list(); - elem.style.marginLeft = "1em"; - into(check(Global.feature_list), elem); - } - function insert_compare_display(elem) { - if (!is_user_page()) { - throw Error("Invalid call to 'insert_compare_display'"); - } - setup_compare_feature_list(); - into(check(Global.feature_display_list), elem); - } - function setup_compare_feature_list() { - if (Global.feature_list === undefined) { - const select_score_order_elem = check(document.querySelector(".content div.select")); - const parent_box_elem = check(select_score_order_elem.parentElement); - Global.feature_list = create("div", { class: "level-item" }); - const level_box_elem = create("div", { class: "level" }, Global.feature_list); - parent_box_elem.replaceChild(level_box_elem, select_score_order_elem); - insert_compare_feature(select_score_order_elem); - Global.feature_display_list = create("div", { class: "level-item" }); - level_box_elem.insertAdjacentElement("afterend", Global.feature_display_list); - } - } - function set_compare_user(user) { - Global.last_selected = user; - localStorage.setItem("last_selected", user); - } - function set_home_user(user) { - Global._home_user = user; - localStorage.setItem("home_user", JSON.stringify(user)); - } - function set_wide_table(value) { - localStorage.setItem("wide_song_table", value ? "true" : "false"); - } - function get_wide_table() { - return localStorage.getItem("wide_song_table") === "true"; - } - const BMPage = ["song", "songlist", "user"]; - const BMButton = ["BS", "OC", "Beast", "BeastBook", "Preview", "BSR"]; - const BMPageButtons = BMPage - .map(p => BMButton.map(b => `${p}-${b}`)) - .reduce((agg, lis) => [...agg, ...lis], []); - const BMButtonHelp = { - BS: { short: "BS", long: "BeatSaver", tip: "View on BeatSaver" }, - OC: { short: "OC", long: "OneClick™", tip: "Download with OneClick™" }, - Beast: { short: "BST", long: "BeastSaber", tip: "View/Add rating on BeastSaber" }, - BeastBook: { short: "BB", long: "BeastSaber Bookmark", tip: "Bookmark on BeastSaber" }, - Preview: { short: "👓", long: "Preview", tip: "Preview map" }, - BSR: { short: "❗", long: "BeatSaver Request", tip: "Copy !bsr" }, - }; - function bmvar(page, button, def) { - return { - display: `var(--sse-show-${page}-${button}, ${def})`, - }; - } - function get_button_matrix() { - const json = localStorage.getItem("sse_button_matrix"); - if (!json) - return default_button_matrix(); - return JSON.parse(json); - } - function default_button_matrix() { - return { - "song-BS": true, - "song-BSR": true, - "song-Beast": true, - "song-BeastBook": true, - "song-OC": true, - "song-Preview": true, - "songlist-BS": true, - "songlist-OC": true, - "user-BS": true, - "user-OC": true, - }; - } - function set_button_matrix(bm) { - localStorage.setItem("sse_button_matrix", JSON.stringify(bm)); - } - function set_use_new_ss_api(value) { - localStorage.setItem("use_new_api", value ? "true" : "false"); - } - function get_use_new_ss_api() { - return (localStorage.getItem("use_new_api") || "true") === "true"; - } - function set_bsaber_username(value) { - localStorage.setItem("bsaber_username", value); - } - function get_bsaber_username() { - return (localStorage.getItem("bsaber_username") || undefined); - } - function get_bsaber_bookmarks() { - const data = localStorage.getItem("bsaber_bookmarks"); - if (!data) - return []; - return JSON.parse(data); - } - function add_bsaber_bookmark(song_hash) { - const bookmarks = get_bsaber_bookmarks(); - bookmarks.push(song_hash); - localStorage.setItem("bsaber_bookmarks", JSON.stringify(bookmarks)); - } - function check_bsaber_bookmark(song_hash) { - const bookmarks = get_bsaber_bookmarks(); - return bookmarks.includes(song_hash.toLowerCase()); - } - - function format_en(num, digits) { - if (digits === undefined) - digits = 2; - return num.toLocaleString("en", { minimumFractionDigits: digits, maximumFractionDigits: digits }); - } - function toggled_class(bool, css_class) { - return bool ? css_class : ""; - } - function number_invariant(num) { - return Number(num.replace(/,/g, "")); - } - function number_to_timespan(num) { - const SECONDS_IN_MINUTE = 60; - const MINUTES_IN_HOUR = 60; - let str = ""; - let mod = (num % SECONDS_IN_MINUTE); - str = mod.toFixed(0).padStart(2, "0") + str; - num = (num - mod) / SECONDS_IN_MINUTE; - mod = (num % MINUTES_IN_HOUR); - str = mod.toFixed(0).padStart(2, "0") + ":" + str; - num = (num - mod) / MINUTES_IN_HOUR; - return str; - } - function round2(num) { - return Math.round(num * 100) / 100; - } - function read_inline_date(date) { - return moment.utc(date, "YYYY-MM-DD HH:mm:ss UTC"); - } - - class Limiter { - constructor() { - this.ratelimit_reset = undefined; - this.ratelimit_remaining = undefined; - } - async wait() { - const now = unix_timestamp(); - if (this.ratelimit_reset === undefined || now > this.ratelimit_reset) { - this.ratelimit_reset = undefined; - this.ratelimit_remaining = undefined; - return; - } - if (this.ratelimit_remaining === 0) { - const sleepTime = (this.ratelimit_reset - now); - console.log(`Waiting for cloudflare rate limiter... ${sleepTime}sec`); - await sleep(sleepTime * 1000); - this.ratelimit_remaining = this.ratelimit_limit; - this.ratelimit_reset = undefined; - } - } - setLimitData(remaining, reset, limit) { - this.ratelimit_remaining = remaining; - this.ratelimit_reset = reset; - this.ratelimit_limit = limit; - } - } - async function sleep(timeout) { - return new Promise(resolve => setTimeout(resolve, timeout)); - } - function unix_timestamp() { - return Math.round((new Date()).getTime() / 1000); - } - - function setup$3() { - Global.debug = localStorage.getItem("debug") === "true"; - } - function logc(message, ...optionalParams) { - if (Global.debug) { - console.log("DBG", message, ...optionalParams); - } - } - - let SSE_addStyle; - let SSE_xmlhttpRequest; - let SSE_info; - function setup$2() { - if (typeof (GM) !== "undefined") { - logc("Using GM.* extenstions", GM); - SSE_addStyle = GM_addStyle_custom; - SSE_xmlhttpRequest = GM.xmlHttpRequest; - SSE_info = GM.info; - } - else { - logc("Using GM_ extenstions"); - SSE_addStyle = GM_addStyle; - SSE_xmlhttpRequest = GM_xmlhttpRequest; - SSE_info = GM_info; - } - } - function GM_addStyle_custom(css) { - const style = create("style"); - style.innerHTML = css; - into(document.head, style); - return style; - } - async function load_chart_lib() { - if (typeof Chart !== "function") { - try { - const resp = await fetch("https://scoresaber.com/imports/js/chart.js"); - const js = await resp.text(); - new Function(js)(); - } - catch (err) { - console.warn("Failed to fetch chartjs. Charts might not work", err); - return false; - } - } - return true; - } - - function fetch2(url) { - return new Promise((resolve, reject) => { - const host = get_hostname(url); - const request_param = { - method: "GET", - url: url, - headers: { Origin: host }, - onload: (req) => { - if (req.status >= 200 && req.status < 300) { - resolve(req.responseText); - } - else { - reject(`request errored: ${url} (${req.status})`); - } - }, - onerror: () => { - reject(`request errored: ${url}`); - } - }; - SSE_xmlhttpRequest(request_param); - }); - } - function get_hostname(url) { - const match = url.match(/:\/\/([^/:]+)/i); - if (match !== null) { - return match[1]; - } - else { - return undefined; - } - } - function new_page(link) { - window.open(link, "_blank"); - } - - class SessionCache { - constructor(prefix) { - this.prefix = prefix; - if (prefix === undefined) - throw Error("Prefix must be set. If you don't want a prefix, explicitely pass ''."); - } - get(key) { - const item = sessionStorage.getItem(this.prefix + key); - if (item === null) - return undefined; - return JSON.parse(item); - } - set(key, value) { - sessionStorage.setItem(this.prefix + key, JSON.stringify(value)); - } - } - - const api_cache$1 = new SessionCache("saver"); - async function get_data_by_hash(song_hash) { - const cached_data = api_cache$1.get(song_hash); - if (cached_data !== undefined) - return cached_data; - try { - const data_str = await fetch2(`https://api.beatsaver.com/maps/hash/${song_hash}`); - const data = JSON.parse(data_str); - api_cache$1.set(song_hash, data); - return data; - } - catch (err) { - logc("Failed to download song data", err); - return undefined; - } - } - async function get_scoresaber_data_by_hash(song_hash, diff_name) { - try { - const diff_value = diff_name === undefined ? 0 : diff_name_to_value(diff_name); - const data_str = await fetch2(`https://beatsaver.com/api/scores/${song_hash}/0?difficulty=${diff_value}&gameMode=0`); - const data = JSON.parse(data_str); - return data; - } - catch (err) { - logc("Failed to download song data", err); - return undefined; - } - } - - class Modal { - constructor(elem) { - this.elem = elem; - } - show() { - this.elem.classList.add("is-active"); - document.documentElement.classList.add("is-clipped"); - } - close(answer) { - this.elem.classList.remove("is-active"); - if (!document.querySelector(".modal.is-active")) - document.documentElement.classList.remove("is-clipped"); - if (this.after_close) - this.after_close(answer !== null && answer !== void 0 ? answer : "x"); - } - dispose() { - document.body.removeChild(this.elem); - } - } - function create_modal(opt) { - var _a, _b, _c, _d; - const base_div = create("div", { class: "modal" }); - const modal = new Modal(base_div); - const button_bar = create("div", { class: "buttons" }); - let inner; - switch ((_a = opt.type) !== null && _a !== void 0 ? _a : "content") { - case "content": - inner = create("div", { class: "modal-content" }, create("div", { class: "box" }, opt.text, create("br"), button_bar)); - break; - case "card": - inner = create("div", { class: "modal-card" }, create("header", { class: "modal-card-head" }, (_b = opt.title) !== null && _b !== void 0 ? _b : ""), create("section", { class: "modal-card-body" }, opt.text), create("footer", { class: "modal-card-foot" }, (_c = opt.footer) !== null && _c !== void 0 ? _c : button_bar)); - break; - default: - throw new Error("invalid type"); - } - into(base_div, create("div", { - class: "modal-background", - onclick() { - modal.close("x"); - } - }), inner, create("button", { - class: "modal-close is-large", - onclick() { - modal.close("x"); - } - })); - if (opt.buttons) { - for (const btn_name of Object.keys(opt.buttons)) { - const btn_data = opt.buttons[btn_name]; - into(button_bar, create("button", { - class: ["button", (_d = btn_data.class) !== null && _d !== void 0 ? _d : ""], - onclick() { - modal.close(btn_name); - } - }, btn_data.text)); - } - } - document.body.appendChild(base_div); - if (opt.default) - modal.show(); - return modal; - } - function show_modal(opt) { - return new Promise((resolve) => { - opt.default = true; - const modal = create_modal(opt); - modal.after_close = (answer) => { - modal.dispose(); - resolve(answer); - }; - }); - } - const buttons = { - OkOnly: { x: { text: "Ok", class: "is-primary" } }, + function create(tag, attrs, ...children) { + if (tag === undefined) + throw new Error("'tag' not defined"); + const ele = document.createElement(tag); + if (attrs) { + for (const [attrName, attrValue] of Object.entries(attrs)) { + if (attrName === "style") { + for (const [styleName, styleValue] of Object.entries(attrs.style)) { + ele.style[styleName] = styleValue; + } + } + else if (attrName === "class") { + if (typeof attrs.class === "string") { + const classes = attrs.class.split(/ /g).filter(c => c.trim().length > 0); + ele.classList.add(...classes); + } + else { + ele.classList.add(...attrs.class); + } + } + else if (attrName === "for") { + ele.htmlFor = attrValue; + } + else if (attrName === "selected") { + ele.selected = (attrValue ? "selected" : undefined); + } + else if (attrName === "disabled") { + if (attrValue) + ele.setAttribute("disabled", undefined); + } + else if (attrName === "data") { + const data_dict = attrs[attrName]; + for (const [data_key, data_value] of Object.entries(data_dict)) { + ele.dataset[data_key] = data_value; + } + } + else { + ele[attrName] = attrs[attrName]; + } + } + } + into(ele, ...children); + return ele; + } + function clear_children(elem) { + while (elem.lastChild) { + elem.removeChild(elem.lastChild); + } + } + function intor(parent, ...children) { + clear_children(parent); + return into(parent, ...children); + } + function into(parent, ...children) { + for (const child of children) { + if (typeof child === "string") { + if (children.length > 1) { + parent.appendChild(to_node(child)); + } + else { + parent.textContent = child; + } + } + else if ("then" in child) { + const dummy = document.createElement("DIV"); + parent.appendChild(dummy); + (async () => { + const node = await child; + parent.replaceChild(to_node(node), dummy); + })(); + } + else { + parent.appendChild(child); + } + } + return parent; + } + function to_node(elem) { + if (typeof elem === "string") { + const text_div = document.createElement("DIV"); + text_div.textContent = elem; + return text_div; + } + return elem; + } + function as_fragment(builder) { + const frag = document.createDocumentFragment(); + builder(frag); + return frag; + } + + function check(elem) { + if (elem === undefined || elem === null) { + throw new Error("Expected value to not be null"); + } + return elem; + } + + function get_user_header() { + return check(document.querySelector(".player-link")); + } + function get_navbar() { + return check(document.querySelector("nav")); + } + function is_user_page() { + return window.location.href.toLowerCase().startsWith(Global.scoresaber_link + "/u/"); + } + function is_song_leaderboard_page() { + return window.location.href.toLowerCase().startsWith(Global.scoresaber_link + "/leaderboard/"); + } + function get_current_user() { + if (Global._current_user) { + return Global._current_user; + } + if (!is_user_page()) { + throw new Error("Not on a user page"); + } + Global._current_user = get_document_user(document); + return Global._current_user; + } + function get_document_user(doc) { + const username_elem = check(doc.querySelector(".player-link")); + const user_name = username_elem.innerText.trim(); + const user_id = Global.user_reg.exec(window.location.href)[1]; + return { id: user_id, name: user_name }; + } + function get_home_user() { + if (Global._home_user) { + return Global._home_user; + } + const json = localStorage.getItem("home_user"); + if (!json) { + return undefined; + } + Global._home_user = JSON.parse(json); + return Global._home_user; + } + function get_compare_user() { + if (Global.last_selected) { + return Global.last_selected; + } + const stored_last = localStorage.getItem("last_selected"); + if (stored_last) { + Global.last_selected = stored_last; + return Global.last_selected; + } + const compare = document.getElementById("user_compare"); + if (compare === null || compare === void 0 ? void 0 : compare.value) { + Global.last_selected = compare.value; + return Global.last_selected; + } + return undefined; + } + function insert_compare_feature(elem) { + if (!is_user_page()) { + throw Error("Invalid call to 'insert_compare_feature'"); + } + setup_compare_feature_list(); + elem.style.marginLeft = "1em"; + into(check(Global.feature_list), elem); + } + function insert_compare_display(elem) { + if (!is_user_page()) { + throw Error("Invalid call to 'insert_compare_display'"); + } + setup_compare_feature_list(); + into(check(Global.feature_display_list), elem); + } + function setup_compare_feature_list() { + if (Global.feature_list === undefined) { + const select_score_order_elem = check(document.querySelector(".btn-group")); + const parent_box_elem = check(select_score_order_elem.parentElement); + Global.feature_list = create("div", { class: "level-item" }); + const level_box_elem = create("div", { class: "level" }, Global.feature_list); + parent_box_elem.replaceChild(level_box_elem, select_score_order_elem); + insert_compare_feature(select_score_order_elem); + Global.feature_display_list = create("div", { class: "level-item" }); + level_box_elem.insertAdjacentElement("afterend", Global.feature_display_list); + } + } + function set_compare_user(user) { + Global.last_selected = user; + localStorage.setItem("last_selected", user); + } + function set_home_user(user) { + Global._home_user = user; + localStorage.setItem("home_user", JSON.stringify(user)); + } + function set_wide_table(value) { + localStorage.setItem("wide_song_table", value ? "true" : "false"); + } + function get_wide_table() { + return localStorage.getItem("wide_song_table") === "true"; + } + const BMPage = ["song", "songlist", "user"]; + const BMButton = ["BS", "OC", "Beast", "BeastBook", "Preview", "BSR"]; + const BMPageButtons = BMPage + .map(p => BMButton.map(b => `${p}-${b}`)) + .reduce((agg, lis) => [...agg, ...lis], []); + const BMButtonHelp = { + BS: { short: "BS", long: "BeatSaver", tip: "View on BeatSaver" }, + OC: { short: "OC", long: "OneClick™", tip: "Download with OneClick™" }, + Beast: { short: "BST", long: "BeastSaber", tip: "View/Add rating on BeastSaber" }, + BeastBook: { short: "BB", long: "BeastSaber Bookmark", tip: "Bookmark on BeastSaber" }, + Preview: { short: "👓", long: "Preview", tip: "Preview map" }, + BSR: { short: "❗", long: "BeatSaver Request", tip: "Copy !bsr" }, + }; + function bmvar(page, button, def) { + return { + display: `var(--sse-show-${page}-${button}, ${def})`, + }; + } + function get_button_matrix() { + const json = localStorage.getItem("sse_button_matrix"); + if (!json) + return default_button_matrix(); + return JSON.parse(json); + } + function default_button_matrix() { + return { + "song-BS": true, + "song-BSR": true, + "song-Beast": true, + "song-BeastBook": true, + "song-OC": true, + "song-Preview": true, + "songlist-BS": true, + "songlist-OC": true, + "user-BS": true, + "user-OC": true, + }; + } + function set_button_matrix(bm) { + localStorage.setItem("sse_button_matrix", JSON.stringify(bm)); + } + function set_use_new_ss_api(value) { + localStorage.setItem("use_new_api", value ? "true" : "false"); + } + function get_use_new_ss_api() { + return (localStorage.getItem("use_new_api") || "true") === "true"; + } + function set_bsaber_username(value) { + localStorage.setItem("bsaber_username", value); + } + function get_bsaber_username() { + return (localStorage.getItem("bsaber_username") || undefined); + } + function get_bsaber_bookmarks() { + const data = localStorage.getItem("bsaber_bookmarks"); + if (!data) + return []; + return JSON.parse(data); + } + function add_bsaber_bookmark(song_hash) { + const bookmarks = get_bsaber_bookmarks(); + bookmarks.push(song_hash); + localStorage.setItem("bsaber_bookmarks", JSON.stringify(bookmarks)); + } + function check_bsaber_bookmark(song_hash) { + const bookmarks = get_bsaber_bookmarks(); + return bookmarks.includes(song_hash.toLowerCase()); + } + + function format_en(num, digits) { + if (digits === undefined) + digits = 2; + return num.toLocaleString("en", { minimumFractionDigits: digits, maximumFractionDigits: digits }); + } + function toggled_class(bool, css_class) { + return bool ? css_class : ""; + } + function number_invariant(num) { + return Number(num.replace(/,/g, "")); + } + function number_to_timespan(num) { + const SECONDS_IN_MINUTE = 60; + const MINUTES_IN_HOUR = 60; + let str = ""; + let mod = (num % SECONDS_IN_MINUTE); + str = mod.toFixed(0).padStart(2, "0") + str; + num = (num - mod) / SECONDS_IN_MINUTE; + mod = (num % MINUTES_IN_HOUR); + str = mod.toFixed(0).padStart(2, "0") + ":" + str; + num = (num - mod) / MINUTES_IN_HOUR; + return str; + } + function round2(num) { + return Math.round(num * 100) / 100; + } + function read_inline_date(date) { + return moment.utc(date, "YYYY-MM-DD HH:mm:ss UTC"); + } + + class Limiter { + constructor() { + this.ratelimit_reset = undefined; + this.ratelimit_remaining = undefined; + } + async wait() { + const now = unix_timestamp(); + if (this.ratelimit_reset === undefined || now > this.ratelimit_reset) { + this.ratelimit_reset = undefined; + this.ratelimit_remaining = undefined; + return; + } + if (this.ratelimit_remaining === 0) { + const sleepTime = (this.ratelimit_reset - now); + console.log(`Waiting for cloudflare rate limiter... ${sleepTime}sec`); + await sleep(sleepTime * 1000); + this.ratelimit_remaining = this.ratelimit_limit; + this.ratelimit_reset = undefined; + } + } + setLimitData(remaining, reset, limit) { + this.ratelimit_remaining = remaining; + this.ratelimit_reset = reset; + this.ratelimit_limit = limit; + } + } + async function sleep(timeout) { + return new Promise(resolve => setTimeout(resolve, timeout)); + } + function unix_timestamp() { + return Math.round((new Date()).getTime() / 1000); + } + + function setup$3() { + Global.debug = localStorage.getItem("debug") === "true"; + } + function logc(message, ...optionalParams) { + if (Global.debug) { + console.log("DBG", message, ...optionalParams); + } + } + + let SSE_addStyle; + let SSE_xmlhttpRequest; + let SSE_info; + function setup$2() { + if (typeof (GM) !== "undefined") { + logc("Using GM.* extenstions", GM); + SSE_addStyle = GM_addStyle_custom; + SSE_xmlhttpRequest = GM.xmlHttpRequest; + SSE_info = GM.info; + } + else { + logc("Using GM_ extenstions"); + SSE_addStyle = GM_addStyle; + SSE_xmlhttpRequest = GM_xmlhttpRequest; + SSE_info = GM_info; + } + } + function GM_addStyle_custom(css) { + const style = create("style"); + style.innerHTML = css; + into(document.head, style); + return style; + } + async function load_chart_lib() { + if (typeof Chart !== "function") { + try { + const resp = await fetch("https://old.scoresaber.com/imports/js/chart.js"); + const js = await resp.text(); + new Function(js)(); + } + catch (err) { + console.warn("Failed to fetch chartjs. Charts might not work", err); + return false; + } + } + return true; + } + + function fetch2(url) { + return new Promise((resolve, reject) => { + const host = get_hostname(url); + const request_param = { + method: "GET", + url: url, + headers: { Origin: host }, + onload: (req) => { + if (req.status >= 200 && req.status < 300) { + resolve(req.responseText); + } + else { + reject(`request errored: ${url} (${req.status})`); + } + }, + onerror: () => { + reject(`request errored: ${url}`); + } + }; + SSE_xmlhttpRequest(request_param); + }); + } + function get_hostname(url) { + const match = url.match(/:\/\/([^/:]+)/i); + if (match !== null) { + return match[1]; + } + else { + return undefined; + } + } + function new_page(link) { + window.open(link, "_blank"); + } + + class SessionCache { + constructor(prefix) { + this.prefix = prefix; + if (prefix === undefined) + throw Error("Prefix must be set. If you don't want a prefix, explicitely pass ''."); + } + get(key) { + const item = sessionStorage.getItem(this.prefix + key); + if (item === null) + return undefined; + return JSON.parse(item); + } + set(key, value) { + sessionStorage.setItem(this.prefix + key, JSON.stringify(value)); + } + } + + const api_cache$1 = new SessionCache("saver"); + async function get_data_by_hash(song_hash) { + const cached_data = api_cache$1.get(song_hash); + if (cached_data !== undefined) + return cached_data; + try { + const data_str = await fetch2(`https://api.beatsaver.com/maps/hash/${song_hash}`); + const data = JSON.parse(data_str); + api_cache$1.set(song_hash, data); + return data; + } + catch (err) { + logc("Failed to download song data", err); + return undefined; + } + } + async function get_scoresaber_data_by_hash(song_hash, diff_name) { + try { + const diff_value = diff_name === undefined ? 0 : diff_name_to_value(diff_name); + const data_str = await fetch2(`https://beatsaver.com/api/scores/${song_hash}/0?difficulty=${diff_value}&gameMode=0`); + const data = JSON.parse(data_str); + return data; + } + catch (err) { + logc("Failed to download song data", err); + return undefined; + } + } + + class Modal { + constructor(elem) { + this.elem = elem; + } + show() { + this.elem.classList.add("is-active"); + document.documentElement.classList.add("is-clipped"); + } + close(answer) { + this.elem.classList.remove("is-active"); + if (!document.querySelector(".modal.is-active")) + document.documentElement.classList.remove("is-clipped"); + if (this.after_close) + this.after_close(answer !== null && answer !== void 0 ? answer : "x"); + } + dispose() { + document.body.removeChild(this.elem); + } + } + function create_modal(opt) { + var _a, _b, _c, _d; + const base_div = create("div", { class: "modal" }); + const modal = new Modal(base_div); + const button_bar = create("div", { class: "buttons" }); + let inner; + switch ((_a = opt.type) !== null && _a !== void 0 ? _a : "content") { + case "content": + inner = create("div", { class: "modal-content" }, create("div", { class: "box" }, opt.text, create("br"), button_bar)); + break; + case "card": + inner = create("div", { class: "modal-card" }, create("header", { class: "modal-card-head" }, (_b = opt.title) !== null && _b !== void 0 ? _b : ""), create("section", { class: "modal-card-body" }, opt.text), create("footer", { class: "modal-card-foot" }, (_c = opt.footer) !== null && _c !== void 0 ? _c : button_bar)); + break; + default: + throw new Error("invalid type"); + } + into(base_div, create("div", { + class: "modal-background", + onclick() { + modal.close("x"); + } + }), inner, create("button", { + class: "modal-close is-large", + onclick() { + modal.close("x"); + } + })); + if (opt.buttons) { + for (const btn_name of Object.keys(opt.buttons)) { + const btn_data = opt.buttons[btn_name]; + into(button_bar, create("button", { + class: ["button", (_d = btn_data.class) !== null && _d !== void 0 ? _d : ""], + onclick() { + modal.close(btn_name); + } + }, btn_data.text)); + } + } + document.body.appendChild(base_div); + if (opt.default) + modal.show(); + return modal; + } + function show_modal(opt) { + return new Promise((resolve) => { + opt.default = true; + const modal = create_modal(opt); + modal.after_close = (answer) => { + modal.dispose(); + resolve(answer); + }; + }); + } + const buttons = { + OkOnly: { x: { text: "Ok", class: "is-primary" } }, }; - function get_song_compare_value(song_a, song_b) { - if (song_a.pp > 0 || song_b.pp > 0) { - return [song_a.pp, song_b.pp]; - } - else if (song_a.score !== undefined && song_b.score !== undefined) { - return [song_a.score, song_b.score]; - } - else if (song_a.accuracy !== undefined && song_b.accuracy !== undefined) { - return [song_a.accuracy * get_song_mod_multiplier(song_a), song_b.accuracy * get_song_mod_multiplier(song_b)]; - } - else { - return [-1, -1]; - } - } - function get_song_mod_multiplier(song) { - if (!song.mods) - return 1.0; - let multiplier = 1.0; - for (const mod of song.mods) { - switch (mod) { - case "NF": - multiplier -= 0.50; - break; - case "NO": - multiplier -= 0.05; - break; - case "NB": - multiplier -= 0.10; - break; - case "SS": - multiplier -= 0.30; - break; - case "NA": - multiplier -= 0.30; - break; - case "DA": - multiplier += 0.07; - break; - case "GN": - multiplier += 0.11; - break; - case "FS": - multiplier += 0.08; - break; - } - } - return Math.max(0, multiplier); - } - function get_song_hash_from_text(text) { - var _a; - const res = Global.song_hash_reg.exec(text); - return res ? (_a = res[1]) === null || _a === void 0 ? void 0 : _a.toLowerCase() : undefined; - } - async function oneclick_install(song_key) { - const lastCheck = localStorage.getItem("oneclick-prompt"); - const prompt = !lastCheck || - new Date(lastCheck).getTime() + (1000 * 60 * 60 * 24 * 31) < new Date().getTime(); - if (prompt) { - localStorage.setItem("oneclick-prompt", new Date().getTime().toString()); - const resp = await show_modal({ - buttons: { - install: { text: "Get ModAssistant Installer", class: "is-info" }, - done: { text: "OK, now leave me alone", class: "is-success" }, - }, - text: "OneClick™ requires any current ModInstaller tool with the OneClick™ feature enabled.\nMake sure you have one installed before proceeding.", - }); - if (resp === "install") { - window.open("https://github.com/Assistant/ModAssistant/releases"); - return; - } - } - console.log("Downloading: ", song_key); - window.location.assign(`beatsaver://${song_key}`); - } - function song_equals(a, b) { - if (a === b) - return true; - if (a === undefined || b === undefined) - return false; - return (a.accuracy === b.accuracy && - a.pp === b.pp && - a.score === b.score && - a.time === b.time && - array_equals(a.mods, b.mods)); - } - function array_equals(a, b) { - if (a === b) - return true; - if (a === undefined || b === undefined) - return false; - if (a.length !== b.length) - return false; - for (let i = 0; i < a.length; i++) { - if (a[i] !== b[i]) - return false; - } - return true; - } - function parse_mods(mods) { - if (!mods) - return undefined; - const modarr = mods.split(/,/g); - if (modarr.length === 0) - return undefined; - return modarr; - } - function parse_score_bottom(text) { - let score = undefined; - let accuracy = undefined; - let mods = undefined; - const score_res = check(Global.score_reg.exec(text)); - if (score_res[1] === "score") { - score = number_invariant(score_res[2]); - } - else if (score_res[1] === "accuracy") { - accuracy = Number(score_res[2]); - } - if (score_res[4]) { - mods = parse_mods(score_res[4]); - } - return { score, accuracy, mods }; - } - function get_notes_count(diff_name, characteristic, version) { - var _a; - if (diff_name === "Expert+") - diff_name = "ExpertPlus"; - const diff = version.diffs.find((d) => (d.characteristic === characteristic && d.difficulty === diff_name)); - return (_a = diff === null || diff === void 0 ? void 0 : diff.notes) !== null && _a !== void 0 ? _a : -1; - } - function calculate_max_score(notes) { - const note_score = 115; - if (notes <= 1) - return note_score * (0 + (notes - 0) * 1); - if (notes <= 5) - return note_score * (1 + (notes - 1) * 2); - if (notes <= 13) - return note_score * (9 + (notes - 5) * 4); - return note_score * (41 + (notes - 13) * 8); - } - function diff_name_to_value(name) { - switch (name) { - case "Easy": return 1; - case "Medium": return 3; - case "Hard": return 5; - case "Expert": return 7; - case "ExpertPlus": return 9; - default: return -1; - } - } - - const SCORESABER_LINK = "https://new.scoresaber.com/api"; - const API_LIMITER = new Limiter(); - async function get_user_recent_songs_dynamic(user_id, page) { - logc(`Fetching user ${user_id} page ${page}`); - if (get_use_new_ss_api()) { - return get_user_recent_songs_new_api_wrap(user_id, page); - } - else { - return get_user_recent_songs_old_api_wrap(user_id, page); - } - } - async function get_user_recent_songs_new_api_wrap(user_id, page) { - const recent_songs = await get_user_recent_songs(user_id, page); - if (!recent_songs) { - return { - meta: { was_last_page: true }, - songs: [] - }; - } - return { - meta: { - was_last_page: recent_songs.scores.length < 8 - }, - songs: recent_songs.scores.map(s => [String(s.leaderboardId), { - time: s.timeSet, - pp: s.pp, - accuracy: s.maxScore !== 0 ? round2((s.unmodififiedScore / s.maxScore) * 100) : undefined, - score: s.score, - mods: parse_mods(s.mods) - }]) - }; - } - async function get_user_recent_songs(user_id, page) { - const req = await auto_fetch_retry(`${SCORESABER_LINK}/player/${user_id}/scores/recent/${page}`); - if (req.status === 404) { - return null; - } - const data = await req.json(); - return sanitize_song_ids(data); - } - async function get_user_info_basic(user_id) { - const req = await auto_fetch_retry(`${SCORESABER_LINK}/player/${user_id}/basic`); - const data = await req.json(); - return sanitize_player_ids(data); - } - async function auto_fetch_retry(url) { - const MAX_RETRIES = 20; - const SLEEP_WAIT = 5000; - for (let retries = MAX_RETRIES; retries >= 0; retries--) { - await API_LIMITER.wait(); - const response = await fetch(url); - const remaining = Number(response.headers.get("x-ratelimit-remaining")); - const reset = Number(response.headers.get("x-ratelimit-reset")); - const limit = Number(response.headers.get("x-ratelimit-limit")); - API_LIMITER.setLimitData(remaining, reset, limit); - if (response.status === 429) { - await sleep(SLEEP_WAIT); - } - else { - return response; - } - } - throw new Error("Can't fetch data from new.scoresaber."); - } - function sanitize_player_ids(data) { - data.playerInfo.playerId = String(data.playerInfo.playerId); - return data; - } - function sanitize_song_ids(data) { - for (const s of data.scores) { - s.scoreId = String(s.scoreId); - s.leaderboardId = String(s.leaderboardId); - s.playerId = String(s.playerId); - } - return data; - } - async function get_user_recent_songs_old_api_wrap(user_id, page) { - let doc; - let tries = 5; - while ((!doc || doc.body.textContent === '"Rate Limit Exceeded"') && tries > 0) { - await sleep(500); - doc = await fetch_user_page(user_id, page); - tries--; - } - if (doc === undefined) { - throw Error("Error fetching user page"); - } - const last_page_elem = doc.querySelector("nav ul.pagination-list li:last-child a"); - const max_pages = Number(last_page_elem.innerText) + 1; - const data = { - meta: { - max_pages, - user_name: get_document_user(doc).name, - was_last_page: page === max_pages, - }, - songs: [], - }; - const table_row = doc.querySelectorAll("table.ranking.songs tbody tr"); - for (const row of table_row) { - const song_data = get_row_data(row); - data.songs.push(song_data); - } - return data; - } - async function fetch_user_page(user_id, page) { - const link = Global.scoresaber_link + `/u/${user_id}&page=${page}&sort=2`; - if (window.location.href.toLowerCase() === link) { - logc("Efficient get :P"); - return document; - } - const init_fetch = await (await fetch(link)).text(); - const parser = new DOMParser(); - return parser.parseFromString(init_fetch, "text/html"); - } - function get_row_data(row) { - const rowc = row; - if (rowc.cache) { - return rowc.cache; - } - const leaderboard_elem = check(row.querySelector("th.song a")); - const pp_elem = check(row.querySelector("th.score .ppValue")); - const score_elem = check(row.querySelector("th.score .scoreBottom")); - const time_elem = check(row.querySelector("th.song .time")); - const song_id = Global.leaderboard_reg.exec(leaderboard_elem.href)[1]; - const pp = Number(pp_elem.innerText); - const time = read_inline_date(time_elem.title).toISOString(); - const { score, accuracy, mods } = parse_score_bottom(score_elem.innerText); - const song = { - pp, - time, - score, - accuracy, - mods, - }; - const data = [song_id, song]; - rowc.cache = data; - return data; - } - - class SseEventHandler { - constructor(eventName) { - this.eventName = eventName; - this.callList = []; - } - invoke(param) { - logc("Event", this.eventName); - for (const func of this.callList) { - func(param); - } - } - register(func) { - this.callList.push(func); - } - } - class SseEvent { - static addNotification(notify) { - this.notificationList.push(notify); - SseEvent.UserNotification.invoke(); - } - static getNotifications() { - return this.notificationList; - } - } - SseEvent.UserCacheChanged = new SseEventHandler("UserCacheChanged"); - SseEvent.CompareUserChanged = new SseEventHandler("CompareUserChanged"); - SseEvent.PinnedUserChanged = new SseEventHandler("PinnedUserChanged"); - SseEvent.UserNotification = new SseEventHandler("UserNotification"); - SseEvent.StatusInfo = new SseEventHandler("StatusInfo"); + function get_song_compare_value(song_a, song_b) { + if (song_a.pp > 0 || song_b.pp > 0) { + return [song_a.pp, song_b.pp]; + } + else if (song_a.score !== undefined && song_b.score !== undefined) { + return [song_a.score, song_b.score]; + } + else if (song_a.accuracy !== undefined && song_b.accuracy !== undefined) { + return [song_a.accuracy * get_song_mod_multiplier(song_a), song_b.accuracy * get_song_mod_multiplier(song_b)]; + } + else { + return [-1, -1]; + } + } + function get_song_mod_multiplier(song) { + if (!song.mods) + return 1.0; + let multiplier = 1.0; + for (const mod of song.mods) { + switch (mod) { + case "NF": + multiplier -= 0.50; + break; + case "NO": + multiplier -= 0.05; + break; + case "NB": + multiplier -= 0.10; + break; + case "SS": + multiplier -= 0.30; + break; + case "NA": + multiplier -= 0.30; + break; + case "DA": + multiplier += 0.07; + break; + case "GN": + multiplier += 0.11; + break; + case "FS": + multiplier += 0.08; + break; + } + } + return Math.max(0, multiplier); + } + function get_song_hash_from_text(text) { + var _a; + const res = Global.song_hash_reg.exec(text); + return res ? (_a = res[1]) === null || _a === void 0 ? void 0 : _a.toLowerCase() : undefined; + } + async function oneclick_install(song_key) { + const lastCheck = localStorage.getItem("oneclick-prompt"); + const prompt = !lastCheck || + new Date(lastCheck).getTime() + (1000 * 60 * 60 * 24 * 31) < new Date().getTime(); + if (prompt) { + localStorage.setItem("oneclick-prompt", new Date().getTime().toString()); + const resp = await show_modal({ + buttons: { + install: { text: "Get ModAssistant Installer", class: "is-info" }, + done: { text: "OK, now leave me alone", class: "is-success" }, + }, + text: "OneClick™ requires any current ModInstaller tool with the OneClick™ feature enabled.\nMake sure you have one installed before proceeding.", + }); + if (resp === "install") { + window.open("https://github.com/Assistant/ModAssistant/releases"); + return; + } + } + console.log("Downloading: ", song_key); + window.location.assign(`beatsaver://${song_key}`); + } + function song_equals(a, b) { + if (a === b) + return true; + if (a === undefined || b === undefined) + return false; + return (a.accuracy === b.accuracy && + a.pp === b.pp && + a.score === b.score && + a.time === b.time && + array_equals(a.mods, b.mods)); + } + function array_equals(a, b) { + if (a === b) + return true; + if (a === undefined || b === undefined) + return false; + if (a.length !== b.length) + return false; + for (let i = 0; i < a.length; i++) { + if (a[i] !== b[i]) + return false; + } + return true; + } + function parse_mods(mods) { + if (!mods) + return undefined; + const modarr = mods.split(/,/g); + if (modarr.length === 0) + return undefined; + return modarr; + } + function get_notes_count(diff_name, characteristic, version) { + var _a; + if (diff_name === "Expert+") + diff_name = "ExpertPlus"; + const diff = version.diffs.find((d) => (d.characteristic === characteristic && d.difficulty === diff_name)); + return (_a = diff === null || diff === void 0 ? void 0 : diff.notes) !== null && _a !== void 0 ? _a : -1; + } + function calculate_max_score(notes) { + const note_score = 115; + if (notes <= 1) + return note_score * (0 + (notes - 0) * 1); + if (notes <= 5) + return note_score * (1 + (notes - 1) * 2); + if (notes <= 13) + return note_score * (9 + (notes - 5) * 4); + return note_score * (41 + (notes - 13) * 8); + } + function diff_name_to_value(name) { + switch (name) { + case "Easy": return 1; + case "Medium": return 3; + case "Hard": return 5; + case "Expert": return 7; + case "ExpertPlus": return 9; + default: return -1; + } + } + + const SCORESABER_LINK = "https://new.scoresaber.com/api"; + const API_LIMITER = new Limiter(); + async function get_user_recent_songs_dynamic(user_id, page) { + logc(`Fetching user ${user_id} page ${page}`); + return get_user_recent_songs_new_api_wrap(user_id, page); + } + async function get_user_recent_songs_new_api_wrap(user_id, page) { + const recent_songs = await get_user_recent_songs(user_id, page); + if (!recent_songs) { + return { + meta: { was_last_page: true }, + songs: [] + }; + } + return { + meta: { + was_last_page: recent_songs.scores.length < 8 + }, + songs: recent_songs.scores.map(s => [String(s.leaderboardId), { + time: s.timeSet, + pp: s.pp, + accuracy: s.maxScore !== 0 ? round2((s.unmodififiedScore / s.maxScore) * 100) : undefined, + score: s.score, + mods: parse_mods(s.mods) + }]) + }; + } + async function get_user_recent_songs(user_id, page) { + const req = await auto_fetch_retry(`${SCORESABER_LINK}/player/${user_id}/scores/recent/${page}`); + if (req.status === 404) { + return null; + } + const data = await req.json(); + return sanitize_song_ids(data); + } + async function get_user_info_basic(user_id) { + const req = await auto_fetch_retry(`${SCORESABER_LINK}/player/${user_id}/basic`); + const data = await req.json(); + return sanitize_player_ids(data); + } + async function auto_fetch_retry(url) { + const MAX_RETRIES = 20; + const SLEEP_WAIT = 5000; + for (let retries = MAX_RETRIES; retries >= 0; retries--) { + await API_LIMITER.wait(); + const response = await fetch(url); + const remaining = Number(response.headers.get("x-ratelimit-remaining")); + const reset = Number(response.headers.get("x-ratelimit-reset")); + const limit = Number(response.headers.get("x-ratelimit-limit")); + API_LIMITER.setLimitData(remaining, reset, limit); + if (response.status === 429) { + await sleep(SLEEP_WAIT); + } + else { + return response; + } + } + throw new Error("Can't fetch data from new.scoresaber."); + } + function sanitize_player_ids(data) { + data.playerInfo.playerId = String(data.playerInfo.playerId); + return data; + } + function sanitize_song_ids(data) { + for (const s of data.scores) { + s.scoreId = String(s.scoreId); + s.leaderboardId = String(s.leaderboardId); + s.playerId = String(s.playerId); + } + return data; + } + + class SseEventHandler { + constructor(eventName) { + this.eventName = eventName; + this.callList = []; + } + invoke(param) { + logc("Event", this.eventName); + for (const func of this.callList) { + func(param); + } + } + register(func) { + this.callList.push(func); + } + } + class SseEvent { + static addNotification(notify) { + this.notificationList.push(notify); + SseEvent.UserNotification.invoke(); + } + static getNotifications() { + return this.notificationList; + } + } + SseEvent.UserCacheChanged = new SseEventHandler("UserCacheChanged"); + SseEvent.CompareUserChanged = new SseEventHandler("CompareUserChanged"); + SseEvent.PinnedUserChanged = new SseEventHandler("PinnedUserChanged"); + SseEvent.UserNotification = new SseEventHandler("UserNotification"); + SseEvent.StatusInfo = new SseEventHandler("StatusInfo"); SseEvent.notificationList = []; - const CURRENT_DATA_VER = 1; - function load() { - const json = localStorage.getItem("users"); - if (!json) { - reset_data(); - return; - } - try { - Global.user_list = JSON.parse(json); - } - catch (ex) { - console.error("Failed to read user cache, resetting!"); - reset_data(); - return; - } - let users_data_ver = get_data_ver(); - if (users_data_ver !== CURRENT_DATA_VER) { - logc("Updating usercache format"); - if (users_data_ver <= 0) { - for (const user of Object.values(Global.user_list)) { - for (const song of Object.values(user.songs)) { - const time = read_inline_date(song.time); - song.time = time.toISOString(); - } - } - users_data_ver = 1; - } - update_data_ver(); - save(); - logc("Update successful"); - } - logc("Loaded usercache", Global.user_list); - } - function reset_data() { - Global.user_list = {}; - localStorage.setItem("users", "{}"); - update_data_ver(); - } - function get_data_ver() { - var _a; - return Number((_a = localStorage.getItem("users_data_ver")) !== null && _a !== void 0 ? _a : "0"); - } - function update_data_ver() { - localStorage.setItem("users_data_ver", String(CURRENT_DATA_VER)); - } - function save() { - localStorage.setItem("users", JSON.stringify(Global.user_list)); - } - - function setup_user_compare() { - if (!is_user_page()) { - return; - } - const header = get_user_header(); - header.style.display = "flex"; - header.style.alignItems = "center"; - const user = get_current_user(); - into(header, create("div", { - class: "button icon is-medium", - style: { cursor: "pointer" }, - data: { tooltip: Global.user_list[user.id] ? "Update score cache" : "Add user to your score cache" }, - async onclick() { - await fetch_user(get_current_user().id); - }, - }, create("i", { class: ["fas", Global.user_list[user.id] ? "fa-sync" : "fa-bookmark"] }))); - const status_elem = create("div"); - into(header, status_elem); - SseEvent.StatusInfo.register((status) => intor(status_elem, status.text)); - Global.users_elem = create("div"); - insert_compare_feature(Global.users_elem); - update_user_compare_dropdown(); - SseEvent.UserCacheChanged.register(update_user_compare_dropdown); - SseEvent.UserCacheChanged.register(update_user_compare_songtable); - SseEvent.CompareUserChanged.register(update_user_compare_songtable); - SseEvent.CompareUserChanged.invoke(); - } - function update_user_compare_dropdown() { - if (!is_user_page()) { - return; - } - const compare = get_compare_user(); - intor(Global.users_elem, create("div", { class: "select" }, create("select", { - id: "user_compare", - onchange() { - const user = this.value; - set_compare_user(user); - SseEvent.CompareUserChanged.invoke(); - } - }, create("option", { value: undefined, selected: compare === undefined }, "(None)"), ...Object.entries(Global.user_list).map(([id, user]) => { - return create("option", { value: id, selected: compare === id }, user.name); - })))); - } - function update_user_compare_songtable(other_user) { - var _a; - if (!is_user_page()) { - return; - } - const table = check(document.querySelector("table.ranking.songs")); - const table_row = table.querySelectorAll("tbody tr"); - const scoreHeader = check(table.querySelector("tr th.score")); - scoreHeader.textContent = "Score"; - table.querySelectorAll(".comparisonScore").forEach(el => el.remove()); - table_row.forEach(row => row.style.backgroundImage = "unset"); - if (other_user === undefined) { - other_user = get_compare_user(); - if (other_user === undefined) { - return; - } - } - const other_data = Global.user_list[other_user]; - if (!other_data) { - logc("Other user not found: ", other_user); - return; - } - const ranking_table_header = check(table.querySelector("thead > tr")); - const scoreCompareHeader = create("th", { class: "comparisonScore" }, other_data.name); - check(ranking_table_header.querySelector(".score")).insertAdjacentElement("afterend", scoreCompareHeader); - const isSameCompare = other_user === get_current_user().id; - const isSelfCompare = isSameCompare && other_user === ((_a = get_home_user()) === null || _a === void 0 ? void 0 : _a.id); - if (isSelfCompare) { - scoreHeader.textContent = "You (now)"; - scoreCompareHeader.textContent = "You (last cache)"; - } - else if (isSameCompare) { - scoreHeader.textContent = `${other_data.name} (now)`; - scoreCompareHeader.textContent = "(last cache)"; - } - else { - scoreHeader.textContent = get_current_user().name; - } - for (const row of table_row) { - const [song_id, song] = get_row_data(row); - const other_song = other_data.songs[song_id]; - let other_score_content; - if (other_song) { - other_score_content = [ - create("span", { class: "scoreTop ppValue" }, format_en(other_song.pp)), - create("span", { class: "scoreTop ppLabel" }, "pp"), - create("br"), - (() => { - let str; - if (other_song.accuracy !== undefined) { - str = `accuracy: ${format_en(other_song.accuracy)}%`; - } - else if (other_song.score !== undefined) { - str = `score: ${format_en(other_song.score)}`; - } - else { - return ""; - } - if (other_song.mods !== undefined) { - str += ` (${other_song.mods.join(",")})`; - } - return create("span", { class: "scoreBottom" }, str); - })() - ]; - } - else { - other_score_content = [create("hr", {})]; - } - check(row.querySelector(".score")).insertAdjacentElement("afterend", create("th", { class: "comparisonScore" }, ...other_score_content)); - if (!other_song) { - logc("No match"); - continue; - } - const [value1, value2] = get_song_compare_value(song, other_song); - if (value1 === -1 && value2 === -1) { - logc("No score"); - continue; - } - let value = (Math.min(value1, value2) / Math.max(value1, value2)) * 100; - const better = value1 > value2; - if (better) { - value = 100 - value; - } - value = round2(value); - if (better) { - row.style.backgroundImage = `linear-gradient(75deg, var(--color-ahead) ${value}%, rgba(0,0,0,0) ${value}%)`; - } - else { - row.style.backgroundImage = `linear-gradient(105deg, rgba(0,0,0,0) ${value}%, var(--color-behind) ${value}%)`; - } - } - } - async function fetch_user(user_id, force = false) { - var _a, _b; - let user = Global.user_list[user_id]; - if (!user) { - user = { - name: "User" + user_id, - songs: {} - }; - Global.user_list[user_id] = user; - } - let page_max = undefined; - let user_name = user.name; - let updated = false; - SseEvent.StatusInfo.invoke({ text: `Fetching user ${user_name}` }); - if (get_use_new_ss_api()) { - const user_data = await get_user_info_basic(user_id); - user_name = user_data.playerInfo.playerName; - } - for (let page = 1;; page++) { - SseEvent.StatusInfo.invoke({ text: `Updating user ${user_name} page ${page}/${(page_max !== null && page_max !== void 0 ? page_max : "?")}` }); - const recent_songs = await get_user_recent_songs_dynamic(user_id, page); - const { has_old_entry, has_updated } = process_user_page(recent_songs.songs, user); - updated = updated || has_updated; - page_max = (_a = recent_songs.meta.max_pages) !== null && _a !== void 0 ? _a : page_max; - user_name = (_b = recent_songs.meta.user_name) !== null && _b !== void 0 ? _b : user_name; - if ((!force && has_old_entry) || recent_songs.meta.was_last_page) { - break; - } - } - user.name = user_name !== null && user_name !== void 0 ? user_name : user.name; - if (updated) { - save(); - } - SseEvent.StatusInfo.invoke({ text: `User ${user_name} updated` }); - SseEvent.UserCacheChanged.invoke(); - } - async function fetch_all(force = false) { - const users = Object.keys(Global.user_list); - for (const user of users) { - await fetch_user(user, force); - } - SseEvent.StatusInfo.invoke({ text: `All users updated` }); - } - function process_user_page(songs, user) { - let has_old_entry = false; - let has_updated = false; - for (const [song_id, song] of songs) { - const song_old = user.songs[song_id]; - if (!song_old || !song_equals(song_old, song)) { - logc("Updated: ", song_old, song); - has_updated = true; - } - else { - logc("Old found: ", song); - has_old_entry = true; - } - user.songs[song_id] = song; - } - return { has_old_entry, has_updated }; - } - - function setup_self_pin_button() { - if (!is_user_page()) { - return; - } - const header = get_user_header(); - into(header, create("div", { - class: "button icon is-medium", - style: { cursor: "pointer" }, - data: { tooltip: "Pin this user to your navigation bar" }, - onclick() { - set_home_user(get_current_user()); - SseEvent.PinnedUserChanged.invoke(); - } - }, create("i", { class: "fas fa-thumbtack" }))); - } - function setup_self_button() { - var _a; - const home_user = (_a = get_home_user()) !== null && _a !== void 0 ? _a : { name: "", id: "0" }; - into(get_navbar(), create("div", { class: "navbar-item has-dropdown is-hoverable" }, create("a", { - id: "home_user", - class: "navbar-item", - href: Global.scoresaber_link + "/u/" + home_user.id - }, home_user.name), create("div", { - id: "home_user_list", - class: "navbar-dropdown" - }))); - update_self_user_list(); - SseEvent.UserCacheChanged.register(update_self_user_list); - SseEvent.PinnedUserChanged.register(update_self_button); - } - function update_self_button() { - var _a; - const home_user = (_a = get_home_user()) !== null && _a !== void 0 ? _a : { name: "", id: "0" }; - const home_elem = document.getElementById("home_user"); - if (home_elem) { - home_elem.href = Global.scoresaber_link + "/u/" + home_user.id; - home_elem.innerText = home_user.name; - } - } - function update_self_user_list() { - const home_user_list_elem = check(document.getElementById("home_user_list")); - intor(home_user_list_elem, ...Object.entries(Global.user_list).map(([id, user]) => { - return create("a", { - class: "navbar-item", - style: { - paddingRight: "1em", - flexWrap: "nowrap", - display: "flex", - }, - href: Global.scoresaber_link + "/u/" + id, - }, create("div", { style: { flex: "1" } }, user.name), create("div", { - class: "button icon is-medium is-danger is-outlined", - style: { marginLeft: "3em" }, - async onclick(ev) { - ev.preventDefault(); - ev.stopPropagation(); - const response = await show_modal({ - text: `Delete User "${user.name}" from cache?`, - buttons: { - delete: { text: "Delete", class: "is-danger" }, - x: { text: "Abort", class: "is-info" } - }, - }); - if (response === "delete") { - logc("Delete user", id, user.name); - delete_user(id); - } - } - }, create("i", { class: "fas fa-trash-alt" }))); - })); - } - function delete_user(user_id) { - if (Global.user_list[user_id]) { - delete Global.user_list[user_id]; - save(); - SseEvent.UserCacheChanged.invoke(); - } + const CURRENT_DATA_VER = 1; + function load() { + const json = localStorage.getItem("users"); + if (!json) { + reset_data(); + return; + } + try { + Global.user_list = JSON.parse(json); + } + catch (ex) { + console.error("Failed to read user cache, resetting!"); + reset_data(); + return; + } + let users_data_ver = get_data_ver(); + if (users_data_ver !== CURRENT_DATA_VER) { + logc("Updating usercache format"); + if (users_data_ver <= 0) { + for (const user of Object.values(Global.user_list)) { + for (const song of Object.values(user.songs)) { + const time = read_inline_date(song.time); + song.time = time.toISOString(); + } + } + users_data_ver = 1; + } + update_data_ver(); + save(); + logc("Update successful"); + } + logc("Loaded usercache", Global.user_list); + } + function reset_data() { + Global.user_list = {}; + localStorage.setItem("users", "{}"); + update_data_ver(); + } + function get_data_ver() { + var _a; + return Number((_a = localStorage.getItem("users_data_ver")) !== null && _a !== void 0 ? _a : "0"); + } + function update_data_ver() { + localStorage.setItem("users_data_ver", String(CURRENT_DATA_VER)); + } + function save() { + localStorage.setItem("users", JSON.stringify(Global.user_list)); + } + + function setup_user_compare() { + if (!is_user_page()) { + return; + } + const header = get_user_header(); + header.style.display = "flex"; + header.style.alignItems = "center"; + const user = get_current_user(); + into(header, create("div", { + class: "button icon is-medium", + style: { cursor: "pointer" }, + data: { tooltip: Global.user_list[user.id] ? "Update score cache" : "Add user to your score cache" }, + async onclick() { + await fetch_user(get_current_user().id); + }, + }, create("i", { class: ["fas", Global.user_list[user.id] ? "fa-sync" : "fa-bookmark"] }))); + const status_elem = create("div"); + into(header, status_elem); + SseEvent.StatusInfo.register((status) => intor(status_elem, status.text)); + Global.users_elem = create("div"); + insert_compare_feature(Global.users_elem); + update_user_compare_dropdown(); + SseEvent.UserCacheChanged.register(update_user_compare_dropdown); + SseEvent.CompareUserChanged.invoke(); + } + function update_user_compare_dropdown() { + if (!is_user_page()) { + return; + } + const compare = get_compare_user(); + intor(Global.users_elem, create("div", { class: "select" }, create("select", { + id: "user_compare", + onchange() { + const user = this.value; + set_compare_user(user); + SseEvent.CompareUserChanged.invoke(); + } + }, create("option", { value: undefined, selected: compare === undefined }, "(None)"), ...Object.entries(Global.user_list).map(([id, user]) => { + return create("option", { value: id, selected: compare === id }, user.name); + })))); + } + async function fetch_user(user_id, force = false) { + var _a, _b; + let user = Global.user_list[user_id]; + if (!user) { + user = { + name: "User" + user_id, + songs: {} + }; + Global.user_list[user_id] = user; + } + let page_max = undefined; + let user_name = user.name; + let updated = false; + SseEvent.StatusInfo.invoke({ text: `Fetching user ${user_name}` }); + if (get_use_new_ss_api()) { + const user_data = await get_user_info_basic(user_id); + user_name = user_data.playerInfo.playerName; + } + for (let page = 1;; page++) { + SseEvent.StatusInfo.invoke({ text: `Updating user ${user_name} page ${page}/${(page_max !== null && page_max !== void 0 ? page_max : "?")}` }); + const recent_songs = await get_user_recent_songs_dynamic(user_id, page); + const { has_old_entry, has_updated } = process_user_page(recent_songs.songs, user); + updated = updated || has_updated; + page_max = (_a = recent_songs.meta.max_pages) !== null && _a !== void 0 ? _a : page_max; + user_name = (_b = recent_songs.meta.user_name) !== null && _b !== void 0 ? _b : user_name; + if ((!force && has_old_entry) || recent_songs.meta.was_last_page) { + break; + } + } + user.name = user_name !== null && user_name !== void 0 ? user_name : user.name; + if (updated) { + save(); + } + SseEvent.StatusInfo.invoke({ text: `User ${user_name} updated` }); + SseEvent.UserCacheChanged.invoke(); + } + async function fetch_all(force = false) { + const users = Object.keys(Global.user_list); + for (const user of users) { + await fetch_user(user, force); + } + SseEvent.StatusInfo.invoke({ text: `All users updated` }); + } + function process_user_page(songs, user) { + let has_old_entry = false; + let has_updated = false; + for (const [song_id, song] of songs) { + const song_old = user.songs[song_id]; + if (!song_old || !song_equals(song_old, song)) { + logc("Updated: ", song_old, song); + has_updated = true; + } + else { + logc("Old found: ", song); + has_old_entry = true; + } + user.songs[song_id] = song; + } + return { has_old_entry, has_updated }; + } + + function setup_self_pin_button() { + if (!is_user_page()) { + return; + } + const header = get_user_header(); + into(header, create("div", { + class: "button icon is-medium", + style: { cursor: "pointer" }, + data: { tooltip: "Pin this user to your navigation bar" }, + onclick() { + set_home_user(get_current_user()); + SseEvent.PinnedUserChanged.invoke(); + } + }, create("i", { class: "fas fa-thumbtack" }))); + } + function setup_self_button() { + var _a; + const home_user = (_a = get_home_user()) !== null && _a !== void 0 ? _a : { name: "", id: "0" }; + into(get_navbar(), create("div", { class: "navbar-item has-dropdown is-hoverable" }, create("a", { + id: "home_user", + class: "navbar-item", + href: Global.scoresaber_link + "/u/" + home_user.id + }, home_user.name), create("div", { + id: "home_user_list", + class: "navbar-dropdown" + }))); + update_self_user_list(); + SseEvent.UserCacheChanged.register(update_self_user_list); + SseEvent.PinnedUserChanged.register(update_self_button); + } + function update_self_button() { + var _a; + const home_user = (_a = get_home_user()) !== null && _a !== void 0 ? _a : { name: "", id: "0" }; + const home_elem = document.getElementById("home_user"); + if (home_elem) { + home_elem.href = Global.scoresaber_link + "/u/" + home_user.id; + home_elem.innerText = home_user.name; + } + } + function update_self_user_list() { + const home_user_list_elem = check(document.getElementById("home_user_list")); + intor(home_user_list_elem, ...Object.entries(Global.user_list).map(([id, user]) => { + return create("a", { + class: "navbar-item", + style: { + paddingRight: "1em", + flexWrap: "nowrap", + display: "flex", + }, + href: Global.scoresaber_link + "/u/" + id, + }, create("div", { style: { flex: "1" } }, user.name), create("div", { + class: "button icon is-medium is-danger is-outlined", + style: { marginLeft: "3em" }, + async onclick(ev) { + ev.preventDefault(); + ev.stopPropagation(); + const response = await show_modal({ + text: `Delete User "${user.name}" from cache?`, + buttons: { + delete: { text: "Delete", class: "is-danger" }, + x: { text: "Abort", class: "is-info" } + }, + }); + if (response === "delete") { + logc("Delete user", id, user.name); + delete_user(id); + } + } + }, create("i", { class: "fas fa-trash-alt" }))); + })); + } + function delete_user(user_id) { + if (Global.user_list[user_id]) { + delete Global.user_list[user_id]; + save(); + SseEvent.UserCacheChanged.invoke(); + } } function noop() { } @@ -1252,10 +1075,10 @@ if (!node) return document; const root = node.getRootNode ? node.getRootNode() : node.ownerDocument; - if (root && root.host) { + if (root.host) { return root; } - return node.ownerDocument; + return document; } function append_stylesheet(node, style) { append(node.head || node, style); @@ -1302,7 +1125,6 @@ return; } } - select.selectedIndex = -1; // no option should be selected } function select_value(select) { const selected_option = select.querySelector(':checked') || select.options[0]; @@ -1476,7 +1298,7 @@ on_disconnect: [], before_update: [], after_update: [], - context: new Map(options.context || (parent_component ? parent_component.$$.context : [])), + context: new Map(parent_component ? parent_component.$$.context : options.context || []), // everything else callbacks: blank_object(), dirty, @@ -1546,13 +1368,13 @@ } } - /* src\components\QuickButton.svelte generated by Svelte v3.44.1 */ + /* src/components/QuickButton.svelte generated by Svelte v3.41.0 */ function add_css(target) { - append_styles(target, "svelte-1so5nc2", "div.svelte-1so5nc2{padding:0;cursor:pointer}div.svelte-1so5nc2:disabled{cursor:default}.bsaber_bg.svelte-1so5nc2{background-image:url(\"https://bsaber.com/wp-content/themes/beastsaber-wp-theme/assets/img/avater-callback.png\");background-size:cover;background-repeat:no-repeat;background-position:center;width:100%;height:100%;border-radius:inherit}.dummy.svelte-1so5nc2{position:absolute;top:0px;left:-100000px}"); + append_styles(target, "svelte-sm24eh", "div.svelte-sm24eh{padding:0;cursor:pointer;z-index:10}div.svelte-sm24eh:disabled{cursor:default}.bsaber_bg.svelte-sm24eh{background-image:url(\"https://bsaber.com/wp-content/themes/beastsaber-wp-theme/assets/img/avater-callback.png\");background-size:cover;background-repeat:no-repeat;background-position:center;width:100%;height:100%;border-radius:inherit}.dummy.svelte-sm24eh{position:absolute;top:0px;left:-100000px}"); } - // (113:26) + // (128:26) function create_if_block_5(ctx) { let i; let t; @@ -1564,7 +1386,7 @@ t = space(); input = element("input"); attr(i, "class", "fas fa-exclamation"); - attr(input, "class", "dummy svelte-1so5nc2"); + attr(input, "class", "dummy svelte-sm24eh"); }, m(target, anchor) { insert(target, i, anchor); @@ -1582,7 +1404,7 @@ }; } - // (111:30) + // (126:30) function create_if_block_4(ctx) { let i; @@ -1601,7 +1423,7 @@ }; } - // (109:32) + // (124:32) function create_if_block_3(ctx) { let i; @@ -1620,14 +1442,14 @@ }; } - // (107:28) + // (122:28) function create_if_block_2(ctx) { let div; return { c() { div = element("div"); - attr(div, "class", "bsaber_bg svelte-1so5nc2"); + attr(div, "class", "bsaber_bg svelte-sm24eh"); }, m(target, anchor) { insert(target, div, anchor); @@ -1639,7 +1461,7 @@ }; } - // (105:25) + // (120:25) function create_if_block_1(ctx) { let i; @@ -1658,14 +1480,14 @@ }; } - // (103:1) {#if type === "BS"} + // (118:1) {#if type === "BS"} function create_if_block(ctx) { let div; return { c() { div = element("div"); - attr(div, "class", "beatsaver_bg svelte-1so5nc2"); + attr(div, "class", "beatsaver_bg svelte-sm24eh"); }, m(target, anchor) { insert(target, div, anchor); @@ -1699,7 +1521,7 @@ c() { div = element("div"); if (if_block) if_block.c(); - attr(div, "class", div_class_value = "button icon is-" + /*size*/ ctx[1] + " " + /*type*/ ctx[0] + "_bg_btn " + /*color*/ ctx[5] + " svelte-1so5nc2"); + attr(div, "class", div_class_value = "button icon is-" + /*size*/ ctx[1] + " " + /*type*/ ctx[0] + "_bg_btn " + /*color*/ ctx[5] + " svelte-sm24eh"); attr(div, "style", /*display*/ ctx[7]); attr(div, "disabled", /*disabled*/ ctx[8]); attr(div, "data-tooltip", /*tooltip*/ ctx[6]); @@ -1728,7 +1550,7 @@ } } - if (dirty & /*size, type, color*/ 35 && div_class_value !== (div_class_value = "button icon is-" + /*size*/ ctx[1] + " " + /*type*/ ctx[0] + "_bg_btn " + /*color*/ ctx[5] + " svelte-1so5nc2")) { + if (dirty & /*size, type, color*/ 35 && div_class_value !== (div_class_value = "button icon is-" + /*size*/ ctx[1] + " " + /*type*/ ctx[0] + "_bg_btn " + /*color*/ ctx[5] + " svelte-sm24eh")) { attr(div, "class", div_class_value); } @@ -1767,6 +1589,45 @@ function instance$1($$self, $$props, $$invalidate) { let disabled; let display; + + var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P + ? value + : new P(function (resolve) { + resolve(value); + }); + } + + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch(e) { + reject(e); + } + } + + function rejected(value) { + try { + step(generator["throw"](value)); + } catch(e) { + reject(e); + } + } + + function step(result) { + result.done + ? resolve(result.value) + : adopt(result.value).then(fulfilled, rejected); + } + + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; + + + let { song_hash = undefined } = $$props; let { type } = $$props; let { size } = $$props; @@ -1777,22 +1638,24 @@ let color; let tooltip; - async function checked_hash_to_song_info(song_hash) { - reset_download_visual(); + function checked_hash_to_song_info(song_hash) { + return __awaiter(this, void 0, void 0, function* () { + reset_download_visual(); - if (song_hash === undefined) { - failed_to_download(); - throw new Error("song_hash is undefined"); - } + if (song_hash === undefined) { + failed_to_download(); + throw new Error("song_hash is undefined"); + } - const song_info = await get_data_by_hash(song_hash); + const song_info = yield get_data_by_hash(song_hash); - if (song_info === undefined) { - failed_to_download(); - throw new Error("song_info is undefined"); - } + if (song_info === undefined) { + failed_to_download(); + throw new Error("song_info is undefined"); + } - return song_info; + return song_info; + }); } function reset_download_visual() { @@ -1808,34 +1671,36 @@ button.classList.add("button_success"); } - async function onclick() { - if (preview) return; - - try { - const song_info = await checked_hash_to_song_info(song_hash); - - if (type === "BS") { - new_page(Global.beatsaver_link + song_info.id); - } else if (type === "OC") { - await oneclick_install(song_info.id); - ok_after_download(); - } else if (type === "Beast") { - new_page(Global.bsaber_songs_link + song_info.id); - } else if (type === "BeastBook") { - new_page(Global.bsaber_songs_link + song_info.id); - } else if (type === "Preview") { - new_page("https://skystudioapps.com/bs-viewer/?id=" + song_info.id); - } else if (type === "BSR") { - $$invalidate(4, txtDummyNode.value = `!bsr ${song_info.id}`, txtDummyNode); - txtDummyNode.select(); - txtDummyNode.setSelectionRange(0, 99999); - document.execCommand("copy"); - ok_after_download(); + function onclick() { + return __awaiter(this, void 0, void 0, function* () { + if (preview) return; + + try { + const song_info = yield checked_hash_to_song_info(song_hash); + + if (type === "BS") { + new_page(Global.beatsaver_link + song_info.id); + } else if (type === "OC") { + yield oneclick_install(song_info.id); + ok_after_download(); + } else if (type === "Beast") { + new_page(Global.bsaber_songs_link + song_info.id); + } else if (type === "BeastBook") { + new_page(Global.bsaber_songs_link + song_info.id); + } else if (type === "Preview") { + new_page("https://skystudioapps.com/bs-viewer/?id=" + song_info.id); + } else if (type === "BSR") { + $$invalidate(4, txtDummyNode.value = `!bsr ${song_info.id}`, txtDummyNode); + txtDummyNode.select(); + txtDummyNode.setSelectionRange(0, 99999); + document.execCommand("copy"); + ok_after_download(); + } + } catch(err) { + console.log("Failed QuickAction", song_hash, err); + failed_to_download(); } - } catch(err) { - console.log("Failed QuickAction", song_hash, err); - failed_to_download(); - } + }); } function input_binding($$value) { @@ -1933,613 +1798,535 @@ } } - const PAGE$2 = "songlist"; - function setup_links_songlist() { - if (!is_songlist_page()) { - return; - } - const song_table = check(document.querySelector("table.ranking.songs")); - const song_table_header = check(song_table.querySelector("thead tr")); - for (const btn of BMButton) { - into(song_table_header, create("th", { - class: "compact", - style: bmvar(PAGE$2, btn, "table-cell"), - }, BMButtonHelp[btn].short)); - } - const song_rows = song_table.querySelectorAll("tbody tr"); - for (const row of song_rows) { - const song_hash = get_song_hash_from_row(row); - for (const btn of BMButton) { - into(row, create("th", { class: "compact", style: bmvar(PAGE$2, btn, "table-cell") }, as_fragment(target => new QuickButton({ - target, - props: { song_hash, size: "medium", type: btn } - })))); - } - } - } - function get_song_hash_from_row(row) { - const image_link = check(row.querySelector("td.song img")).src; - return get_song_hash_from_text(image_link); - } - function setup_extra_filter_checkboxes() { - if (!is_songlist_page()) { - return; - } - setup_duplicates_filter_checkbox(); - } - function setup_duplicates_filter_checkbox() { - var _a, _b; - const checked = should_hide_duplicate_songs(); - const duplicates_filter = create("label", { class: "checkbox" }, create("input", { - id: "duplicates", - type: "checkbox", - checked: checked, - onclick() { - set_hide_duplicate_songs_filter(!checked); - window.location.reload(); - } - })); - duplicates_filter.appendChild(document.createTextNode(" Hide duplicate songs ")); - const ranked_filter = check((_a = document.querySelector("input#ranked")) === null || _a === void 0 ? void 0 : _a.parentElement); - (_b = ranked_filter.parentNode) === null || _b === void 0 ? void 0 : _b.insertBefore(duplicates_filter, ranked_filter.nextSibling); - } - function apply_extra_filters() { - if (!is_songlist_page()) { - return; - } - if (should_hide_duplicate_songs()) { - hide_duplicate_songs(); - } - } - function hide_duplicate_songs() { - const song_table = check(document.querySelector("table.ranking.songs tbody")); - const song_rows = check(song_table.querySelectorAll("tr")); - const hashes = new Set(); - for (const row of song_rows) { - const song_hash = check(get_song_hash_from_row(row)); - if (hashes.has(song_hash)) { - song_table.removeChild(row); - } - else { - hashes.add(song_hash); - } - } - } - function should_hide_duplicate_songs() { - return localStorage.getItem("hide_songlist_duplicates") == "true"; - } - function set_hide_duplicate_songs_filter(filter) { - localStorage.setItem("hide_songlist_duplicates", JSON.stringify(filter)); - } - function is_songlist_page() { - return location.pathname == "/"; - } - - const api_cache = new SessionCache("beast"); - async function get_data(song_key) { - const cached_data = api_cache.get(song_key); - if (cached_data !== undefined) - return cached_data; - try { - const data_str = await fetch2(`https://bsaber.com/wp-json/bsaber-api/songs/${song_key}/ratings`); - const data = JSON.parse(data_str); - api_cache.set(song_key, data); - return data; - } - catch (e) { - return undefined; - } - } - async function get_bookmarks(username, page, count) { - try { - const data_str = await fetch2(`https://bsaber.com/wp-json/bsaber-api/songs/?bookmarked_by=${username}&page=${page}&count=${count}`); - const data = JSON.parse(data_str); - return data; - } - catch (e) { - return undefined; - } - } - - class Lazy { - constructor(generator) { - this.generator = generator; - } - get() { - if (this.generator !== undefined) { - this.value = this.generator(); - this.generator = undefined; - } - return this.value; - } - } - - const PAGE$1 = "song"; - const shared = new Lazy(() => { - var _a; - let details_box = check(document.querySelector(".content .title.is-5")); - details_box = check(details_box.parentElement); - const song_hash = get_song_hash_from_text(details_box.innerHTML); - const diff_name = (_a = document.querySelector(`div.tabs li.is-active span`)) === null || _a === void 0 ? void 0 : _a.innerText; - return { song_hash, details_box, diff_name }; - }); - function setup_song_filter_tabs() { - if (!is_song_leaderboard_page()) { - return; - } - const tab_list_content = check(document.querySelector(".tabs > ul")); - function load_friends() { - let score_table = check(document.querySelector(".ranking .global > tbody")); - Global.song_table_backup = score_table; - const table = check(score_table.parentNode); - table.removeChild(score_table); - score_table = table.appendChild(create("tbody")); - const song_id = Global.leaderboard_reg.exec(window.location.pathname)[1]; - const elements = []; - for (const [user_id, user] of Object.entries(Global.user_list)) { - const song = user.songs[song_id]; - if (!song) - continue; - elements.push([song, generate_song_table_row(user_id, user, song)]); - } - elements.sort((a, b) => { const [sa, sb] = get_song_compare_value(a[0], b[0]); return sb - sa; }); - elements.forEach(x => score_table.appendChild(x[1])); - add_percentage$1(); - } - function load_all() { - if (!Global.song_table_backup) { - return; - } - let score_table = check(document.querySelector(".ranking .global > tbody")); - const table = check(score_table.parentNode); - table.removeChild(score_table); - score_table = table.appendChild(Global.song_table_backup); - Global.song_table_backup = undefined; - add_percentage$1(); - } - tab_list_content.appendChild(generate_tab("All Scores", "all_scores_tab", load_all, true, true)); - tab_list_content.appendChild(generate_tab("Friends", "friends_tab", load_friends, false, false)); - } - function setup_dl_link_leaderboard() { - if (!is_song_leaderboard_page()) { - return; - } - const { song_hash, details_box } = shared.get(); - const tool_strip = create("div", { - id: "leaderboard_tool_strip", - style: { - marginTop: "1em" - } - }); - for (const btn of BMButton) { - new QuickButton({ - target: tool_strip, - props: { song_hash, size: "large", type: btn, page: PAGE$1 } - }); - } - details_box.appendChild(tool_strip); - const song_warning = create("div"); - details_box.appendChild(song_warning); - const box_style = { class: "box", style: { display: "flex", flexDirection: "column", alignItems: "end", padding: "0.5em 1em" } }; - const beatsaver_box = create("div", box_style, create("b", {}, "BeatSaver"), create("span", { class: "icon" }, create("i", { class: "fas fa-spinner fa-pulse" }))); - const beastsaber_box = create("div", box_style, create("b", {}, "BeastSaber"), create("span", { class: "icon" }, create("i", { class: "fas fa-spinner fa-pulse" }))); - const column_style = { class: "column", style: { padding: "0 0.75em" } }; - details_box.appendChild(create("div", { - class: "columns", - style: { - marginTop: "1em" - } - }, create("div", column_style, beatsaver_box), create("div", column_style, beastsaber_box))); - if (!song_hash) - return; - (async () => { - const data = await get_data_by_hash(song_hash); - if (!data) - return; - show_song_warning(song_warning, song_hash, data); - show_beatsaver_song_data(beatsaver_box, data); - const data2 = await get_data(data.id); - if (!data2) - return; - show_beastsaber_song_data(beastsaber_box, data2); - })(); - } - function show_song_warning(elem, song_hash, data) { - const contains_version = data.versions.some(x => x.hash === song_hash); - if (!contains_version) { - const new_song_hash = data.versions[data.versions.length - 1].hash; - const { diff_name } = shared.get(); - intor(elem, create("div", { - style: { marginTop: "1em", cursor: "pointer" }, - class: "notification is-warning", - onclick: async () => { - const bs2ss = await get_scoresaber_data_by_hash(new_song_hash, diff_name); - if (bs2ss === undefined) - return; - new_page(`https://scoresaber.com/leaderboard/${bs2ss.uid}`); - }, - }, create("i", { class: "fas fa-exclamation-triangle" }), create("span", { style: { marginLeft: "0.25em" } }, "A newer version of this song exists on BeatSaver"))); - } - } - function show_beatsaver_song_data(elem, data) { - intor(elem, create("div", { title: "Downloads" }, `${data.stats.downloads} 💾`), create("div", { title: "Upvotes" }, `${data.stats.upvotes} 👍`), create("div", { title: "Downvotes" }, `${data.stats.downvotes} 👎`), create("div", { title: "Beatmap Rating" }, `${(data.stats.score * 100).toFixed(2)}% 💯`), create("div", { title: "Beatmap Duration" }, `${number_to_timespan(data.metadata.duration)} ⏱`)); - } - function show_beastsaber_song_data(elem, data) { - intor(elem, create("div", { title: "Fun Factor" }, `${data.average_ratings.fun_factor} 😃`), create("div", { title: "Rhythm" }, `${data.average_ratings.rhythm} 🎶`), create("div", { title: "Flow" }, `${data.average_ratings.flow} 🌊`), create("div", { title: "Pattern Quality" }, `${data.average_ratings.pattern_quality} 💠`), create("div", { title: "Readability" }, `${data.average_ratings.readability} 👓`), create("div", { title: "Level Quality" }, `${data.average_ratings.level_quality} ✔️`)); - } - function generate_song_table_row(user_id, user, song) { - return create("tr", {}, create("td", { class: "picture" }), create("td", { class: "rank" }, "-"), create("td", { class: "player" }, generate_song_table_player(user_id, user)), create("td", { class: "score" }, song.score !== undefined ? format_en(song.score, 0) : "-"), create("td", { class: "timeset" }, moment(song.time).fromNow()), create("td", { class: "mods" }, song.mods !== undefined ? song.mods.toString() : "-"), create("td", { class: "percentage" }, song.accuracy ? (song.accuracy.toString() + "%") : "-"), create("td", { class: "pp" }, create("span", { class: "scoreTop ppValue" }, format_en(song.pp)), create("span", { class: "scoreTop ppLabel" }, "pp"))); - } - function generate_song_table_player(user_id, user) { - return create("a", { href: `${Global.scoresaber_link}/u/${user_id}` }, user.name); - } - function generate_tab(title, css_id, action, is_active, has_offset) { - const tabClass = `filter_tab ${toggled_class(is_active, "is-active")} ${toggled_class(has_offset, "offset_tab")}`; - return create("li", { - id: css_id, - class: tabClass, - }, create("a", { - class: "has-text-info", - onclick: () => { - document.querySelectorAll(".tabs > ul .filter_tab").forEach(x => x.classList.remove("is-active")); - check(document.getElementById(css_id)).classList.add("is-active"); - if (action) - action(); - } - }, title)); - } - function highlight_user() { - const home_user = get_home_user(); - if (!home_user) { - return; - } - const element = document.querySelector(`table.ranking.global a[href='/u/${home_user.id}']`); - if (element != null) { - element.parentElement.parentElement.style.backgroundColor = "var(--color-highlight)"; - } - } - function add_percentage$1() { - if (!is_song_leaderboard_page()) { - return; - } - const { song_hash, diff_name } = shared.get(); - if (!song_hash) { - return; - } - (async () => { - const data = await get_data_by_hash(song_hash); - if (!data) - return; - if (!diff_name) - return; - const version = data.versions.find((v) => v.hash === song_hash.toLowerCase()); - if (!diff_name || !version) - return; - const notes = get_notes_count(diff_name, "Standard", version); - if (notes < 0) - return; - const max_score = calculate_max_score(notes); - const user_scores = document.querySelectorAll("table.ranking.global tbody > tr"); - for (const score_row of user_scores) { - const percentage_column = check(score_row.querySelector("td.percentage")); - const percentage_value = percentage_column.innerText; - if (percentage_value === "-") { - const score = check(score_row.querySelector("td.score")).innerText; - const score_num = number_invariant(score); - const calculated_percentage = (100 * score_num / max_score).toFixed(2); - percentage_column.innerText = calculated_percentage + "%"; - } - } - })(); - } - - const PAGE = "user"; - function setup_dl_link_user_site() { - if (!is_user_page()) { - return; - } - const table = check(document.querySelector("table.ranking.songs")); - const table_tr = check(table.querySelector("thead tr")); - for (const btn of BMButton) { - into(table_tr, create("th", { - class: "compact", - style: bmvar(PAGE, btn, "table-cell"), - }, BMButtonHelp[btn].short)); - } - const table_row = table.querySelectorAll("tbody tr"); - for (const row of table_row) { - const image_link = check(row.querySelector("th.song img")).src; - const song_hash = get_song_hash_from_text(image_link); - for (const btn of BMButton) { - into(row, create("th", { class: "compact", style: bmvar(PAGE, btn, "table-cell") }, as_fragment(target => new QuickButton({ - target, - props: { song_hash, size: "medium", type: btn } - })))); - } - } - } - function update_wide_table_css() { - if (!is_user_page()) { - return; - } - const table = check(document.querySelector("table.ranking.songs")); - table.classList.toggle("wide_song_table", get_wide_table()); - } - function setup_user_rank_link_swap() { - if (!is_user_page()) { - return; - } - const elem_ranking_links = document.querySelectorAll(".content div.columns ul > li > a"); - console.assert(elem_ranking_links.length >= 2, elem_ranking_links); - const elem_global = elem_ranking_links[0]; - const res_global = check(Global.leaderboard_rank_reg.exec(elem_global.innerText)); - const rank_global = number_invariant(res_global[1]); - elem_global.href = Global.scoresaber_link + "/global/" + rank_to_page(rank_global, Global.user_per_page_global_leaderboard); - const elem_country = elem_ranking_links[1]; - const res_country = check(Global.leaderboard_rank_reg.exec(elem_country.innerText)); - const country_str = check(Global.leaderboard_country_reg.exec(elem_country.href)); - const number_country = number_invariant(res_country[1]); - elem_country.href = Global.scoresaber_link + - "/global/" + rank_to_page(number_country, Global.user_per_page_global_leaderboard) + - "?country=" + country_str[2]; - } - function setup_song_rank_link_swap() { - if (!is_user_page()) { - return; - } - const song_elems = document.querySelectorAll("table.ranking.songs tbody tr"); - for (const row of song_elems) { - const rank_elem = check(row.querySelector(".rank")); - const leaderboard_link = check(row.querySelector("th.song a")).href; - const rank = number_invariant(rank_elem.innerText.slice(1)); - const rank_str = rank_elem.innerText; - rank_elem.innerHTML = ""; - into(rank_elem, create("a", { - href: `${leaderboard_link}?page=${rank_to_page(rank, Global.user_per_page_song_leaderboard)}` - }, rank_str)); - } - } - function rank_to_page(rank, ranks_per_page) { - return Math.max(Math.floor((rank + ranks_per_page - 1) / ranks_per_page), 1); - } - function add_percentage() { - if (!is_user_page()) { - return; - } - const table = check(document.querySelector("table.ranking.songs")); - const table_row = table.querySelectorAll("tbody tr"); - for (const row of table_row) { - const image_link = check(row.querySelector("th.song img")).src; - const song_hash = get_song_hash_from_text(image_link); - if (!song_hash) { - return; - } - const score_column = check(row.querySelector(`th.score`)); - if (!score_column.innerText || score_column.innerText.includes("%")) { - continue; - } - (async () => { - const data = await get_data_by_hash(song_hash); - if (!data) - return; - const song_column = check(row.querySelector(`th.song`)); - const diff_name = check(song_column.querySelector(`span > span`)).innerText; - const version = data.versions.find((v) => v.hash === song_hash.toLowerCase()); - if (!diff_name || !version) - return; - const notes = get_notes_count(diff_name, "Standard", version); - if (notes < 0) - return; - const max_score = calculate_max_score(notes); - const user_score = check(score_column.querySelector(".scoreBottom")).innerText; - const { score } = parse_score_bottom(user_score); - if (score !== undefined) { - const calculated_percentage = (100 * score / max_score).toFixed(2); - check(score_column.querySelector(".ppWeightedValue")).innerHTML = `(${calculated_percentage}%)`; - } - })(); - } - } - - function get_state(elem) { - return !elem.classList.contains(elem.view_class); - } - function set_state(elem, state) { - if (state) { - elem.classList.remove(elem.view_class); - } - else { - elem.classList.add(elem.view_class); - } - } - function button(opt) { - var _a, _b; - const btn = create("div", { - class: "button" - }, opt.text); - btn.view_class = `is-${(_a = opt.type) !== null && _a !== void 0 ? _a : "primary"}`; - btn.on = () => { - var _a; - set_state(btn, true); - (_a = opt.onclick) === null || _a === void 0 ? void 0 : _a.call(btn, true); - }; - btn.off = () => { - var _a; - set_state(btn, false); - (_a = opt.onclick) === null || _a === void 0 ? void 0 : _a.call(btn, false); - }; - btn.toggle = () => { - var _a; - const state = !get_state(btn); - set_state(btn, state); - (_a = opt.onclick) === null || _a === void 0 ? void 0 : _a.call(btn, state); - }; - btn.onclick = () => { - if (btn.getAttribute("disabled") == null) { - btn.toggle(); - } - }; - set_state(btn, (_b = opt.default) !== null && _b !== void 0 ? _b : false); - return btn; - } - - let chart; - let chart_elem; - let chart_button; - function setup_pp_graph() { - if (!is_user_page()) { - return; - } - chart_elem = create("canvas"); - const chart_container = create("div", { - style: { - width: "100%", - height: "20em", - display: "none", - } - }, chart_elem); - insert_compare_display(chart_container); - chart_button = button({ - default: false, - text: "Show pp Graph", - onclick(active) { - if (!chart_elem) - return; - this.innerText = (active ? "Hide" : "Show") + " pp Graph"; - set_pp_graph_visibility(chart_container, active); - } - }); - insert_compare_feature(chart_button); - update_pp_graph_buttons(); - SseEvent.UserCacheChanged.register(update_pp_graph_buttons); - SseEvent.CompareUserChanged.register(update_pp_graph); - } - async function chartUserData(canvasContext, datasets, labels) { - if (chart !== undefined) { - chart.data = { - labels, - datasets - }; - chart.update(); - return; - } - if (!await load_chart_lib()) - return; - chart = new Chart(canvasContext, { - type: "line", - data: { - labels, - datasets, - }, - options: { - responsive: true, - maintainAspectRatio: false, - elements: { - point: { - radius: 2, - } - }, - tooltips: { - callbacks: { - label: tooltipItem => String(tooltipItem.yLabel), - title: () => "", - } - }, - scales: { - xAxes: [{ - display: false, - }] - } - }, - }); - } - function get_graph_data(user_id) { - const user = Global.user_list[user_id]; - if (user === undefined) - return []; - const data = []; - const data_scaled = []; - Object.values(user.songs) - .filter((song) => song.pp > 0) - .sort((a, b) => b.pp - a.pp) - .forEach((song, index) => { - const pp = song.pp; - data.push(pp); - data_scaled.push(+(pp * Math.pow(Global.pp_weighting_factor, index)).toFixed(2)); - }); - const color = (Number(user_id) % 3600) / 10; - return [{ - label: `${user.name} (song pp)`, - backgroundColor: `hsl(${color}, 100%, 50%)`, - borderColor: `hsl(${color}, 100%, 50%)`, - fill: false, - data, - }, { - label: `${user.name} (weighted pp)`, - backgroundColor: `hsl(${color}, 60%, 25%)`, - borderColor: `hsl(${color}, 60%, 25%)`, - fill: false, - data: data_scaled, - }]; - } - function update_pp_graph() { - if (chart_elem === undefined) - return; - let dataSets = get_graph_data(get_current_user().id); - const compare_user = get_compare_user(); - if (get_current_user().id !== compare_user && compare_user !== undefined) - dataSets = [...dataSets, ...get_graph_data(compare_user)]; - let max = 0; - for (const set of dataSets) { - max = Math.max(max, set.data.length); - } - for (const set of dataSets) { - if (set.data.length < max) { - set.data.length = max; - set.data.fill(0, set.data.length, max); - } - } - const labels = Array(max); - labels.fill("Song", 0, max); - chartUserData(check(chart_elem.getContext("2d")), dataSets, labels); - } - function update_pp_graph_buttons() { - if (!chart_button) { - return; - } - const user = get_current_user(); - if (Global.user_list[user.id] === undefined) { - chart_button.setAttribute("disabled", ""); - chart_button.setAttribute("data-tooltip", "Add the user to your score cache for this feature"); - chart_button.off(); - } - else { - chart_button.removeAttribute("disabled"); - chart_button.removeAttribute("data-tooltip"); - } - } - function set_pp_graph_visibility(elem, active) { - if (active) { - if (!chart) { - update_pp_graph(); - } - elem.style.display = ""; - } - else { - elem.style.display = "none"; - } - } - - const themes = ["Default", "Cerulean", "Cosmo", "Cyborg", "Darkly", "Flatly", - "Journal", "Litera", "Lumen", "Lux", "Materia", "Minty", "Nuclear", "Pulse", - "Sandstone", "Simplex", "Slate", "Solar", "Spacelab", "Superhero", "United", - "Yeti"]; - const dark_themes = ["Cyborg", "Darkly", "Nuclear", "Slate", "Solar", "Superhero"]; + const PAGE$2 = "songlist"; + function setup_links_songlist() { + if (!is_songlist_page()) { + return; + } + const song_table = check(document.querySelector("table.ranking.songs")); + const song_table_header = check(song_table.querySelector("thead tr")); + for (const btn of BMButton) { + into(song_table_header, create("th", { + class: "compact", + style: bmvar(PAGE$2, btn, "table-cell"), + }, BMButtonHelp[btn].short)); + } + const song_rows = song_table.querySelectorAll("tbody tr"); + for (const row of song_rows) { + const song_hash = get_song_hash_from_row(row); + for (const btn of BMButton) { + into(row, create("th", { class: "compact", style: bmvar(PAGE$2, btn, "table-cell") }, as_fragment(target => new QuickButton({ + target, + props: { song_hash, size: "medium", type: btn } + })))); + } + } + } + function get_song_hash_from_row(row) { + const image_link = check(row.querySelector("td.song img")).src; + return get_song_hash_from_text(image_link); + } + function setup_extra_filter_checkboxes() { + if (!is_songlist_page()) { + return; + } + setup_duplicates_filter_checkbox(); + } + function setup_duplicates_filter_checkbox() { + var _a, _b; + const checked = should_hide_duplicate_songs(); + const duplicates_filter = create("label", { class: "checkbox" }, create("input", { + id: "duplicates", + type: "checkbox", + checked: checked, + onclick() { + set_hide_duplicate_songs_filter(!checked); + window.location.reload(); + } + })); + duplicates_filter.appendChild(document.createTextNode(" Hide duplicate songs ")); + const ranked_filter = check((_a = document.querySelector("input#ranked")) === null || _a === void 0 ? void 0 : _a.parentElement); + (_b = ranked_filter.parentNode) === null || _b === void 0 ? void 0 : _b.insertBefore(duplicates_filter, ranked_filter.nextSibling); + } + function apply_extra_filters() { + if (!is_songlist_page()) { + return; + } + if (should_hide_duplicate_songs()) { + hide_duplicate_songs(); + } + } + function hide_duplicate_songs() { + const song_table = check(document.querySelector("table.ranking.songs tbody")); + const song_rows = check(song_table.querySelectorAll("tr")); + const hashes = new Set(); + for (const row of song_rows) { + const song_hash = check(get_song_hash_from_row(row)); + if (hashes.has(song_hash)) { + song_table.removeChild(row); + } + else { + hashes.add(song_hash); + } + } + } + function should_hide_duplicate_songs() { + return localStorage.getItem("hide_songlist_duplicates") == "true"; + } + function set_hide_duplicate_songs_filter(filter) { + localStorage.setItem("hide_songlist_duplicates", JSON.stringify(filter)); + } + function is_songlist_page() { + return location.pathname == "/"; + } + + const api_cache = new SessionCache("beast"); + async function get_data(song_key) { + const cached_data = api_cache.get(song_key); + if (cached_data !== undefined) + return cached_data; + try { + const data_str = await fetch2(`https://bsaber.com/wp-json/bsaber-api/songs/${song_key}/ratings`); + const data = JSON.parse(data_str); + api_cache.set(song_key, data); + return data; + } + catch (e) { + return undefined; + } + } + async function get_bookmarks(username, page, count) { + try { + const data_str = await fetch2(`https://bsaber.com/wp-json/bsaber-api/songs/?bookmarked_by=${username}&page=${page}&count=${count}`); + const data = JSON.parse(data_str); + return data; + } + catch (e) { + return undefined; + } + } + + class Lazy { + constructor(generator) { + this.generator = generator; + } + get() { + if (this.generator !== undefined) { + this.value = this.generator(); + this.generator = undefined; + } + return this.value; + } + } + + const PAGE$1 = "song"; + const shared = new Lazy(() => { + var _a; + let details_box = check(document.querySelector(".title.is-5")); + details_box = check(details_box.parentElement.parentElement.parentElement); + const song_hash = get_song_hash_from_text(details_box.innerHTML); + const diff_name = (_a = document.querySelector(`div.tabs a.selected`)) === null || _a === void 0 ? void 0 : _a.innerText; + return { song_hash, details_box, diff_name }; + }); + function setup_song_filter_tabs() { + if (!is_song_leaderboard_page()) { + return; + } + const tab_list_content = check(document.querySelector(".tabs > ul")); + function load_friends() { + let score_table = check(document.querySelector(".ranking .global > tbody")); + Global.song_table_backup = score_table; + const table = check(score_table.parentNode); + table.removeChild(score_table); + score_table = table.appendChild(create("tbody")); + const song_id = Global.leaderboard_reg.exec(window.location.pathname)[1]; + const elements = []; + for (const [user_id, user] of Object.entries(Global.user_list)) { + const song = user.songs[song_id]; + if (!song) + continue; + elements.push([song, generate_song_table_row(user_id, user, song)]); + } + elements.sort((a, b) => { const [sa, sb] = get_song_compare_value(a[0], b[0]); return sb - sa; }); + elements.forEach(x => score_table.appendChild(x[1])); + add_percentage(); + } + function load_all() { + if (!Global.song_table_backup) { + return; + } + let score_table = check(document.querySelector(".ranking .global > tbody")); + const table = check(score_table.parentNode); + table.removeChild(score_table); + score_table = table.appendChild(Global.song_table_backup); + Global.song_table_backup = undefined; + add_percentage(); + } + tab_list_content.appendChild(generate_tab("All Scores", "all_scores_tab", load_all, true, true)); + tab_list_content.appendChild(generate_tab("Friends", "friends_tab", load_friends, false, false)); + } + function setup_dl_link_leaderboard() { + if (!is_song_leaderboard_page()) { + return; + } + const { song_hash, details_box } = shared.get(); + const tool_strip = create("div", { + id: "leaderboard_tool_strip", + style: { + marginTop: "1em" + } + }); + for (const btn of BMButton) { + new QuickButton({ + target: tool_strip, + props: { song_hash, size: "large", type: btn, page: PAGE$1 } + }); + } + details_box.appendChild(tool_strip); + const song_warning = create("div"); + details_box.appendChild(song_warning); + const box_style = { class: "box", style: { display: "flex", flexDirection: "column", alignItems: "end", padding: "0.5em 1em" } }; + const beatsaver_box = create("div", box_style, create("b", {}, "BeatSaver"), create("span", { class: "icon" }, create("i", { class: "fas fa-spinner fa-pulse" }))); + const beastsaber_box = create("div", box_style, create("b", {}, "BeastSaber"), create("span", { class: "icon" }, create("i", { class: "fas fa-spinner fa-pulse" }))); + const column_style = { class: "column", style: { padding: "0 0.75em" } }; + details_box.appendChild(create("div", { + class: "columns", + style: { + marginTop: "1em" + } + }, create("div", column_style, beatsaver_box), create("div", column_style, beastsaber_box))); + if (!song_hash) + return; + (async () => { + const data = await get_data_by_hash(song_hash); + if (!data) + return; + show_song_warning(song_warning, song_hash, data); + show_beatsaver_song_data(beatsaver_box, data); + const data2 = await get_data(data.id); + if (!data2) + return; + show_beastsaber_song_data(beastsaber_box, data2); + })(); + } + function show_song_warning(elem, song_hash, data) { + const contains_version = data.versions.some(x => x.hash === song_hash); + if (!contains_version) { + const new_song_hash = data.versions[data.versions.length - 1].hash; + const { diff_name } = shared.get(); + intor(elem, create("div", { + style: { marginTop: "1em", cursor: "pointer" }, + class: "notification is-warning", + onclick: async () => { + const bs2ss = await get_scoresaber_data_by_hash(new_song_hash, diff_name); + if (bs2ss === undefined) + return; + new_page(`https://scoresaber.com/leaderboard/${bs2ss.uid}`); + }, + }, create("i", { class: "fas fa-exclamation-triangle" }), create("span", { style: { marginLeft: "0.25em" } }, "A newer version of this song exists on BeatSaver"))); + } + } + function show_beatsaver_song_data(elem, data) { + intor(elem, create("div", { title: "Downloads" }, `${data.stats.downloads} 💾`), create("div", { title: "Upvotes" }, `${data.stats.upvotes} 👍`), create("div", { title: "Downvotes" }, `${data.stats.downvotes} 👎`), create("div", { title: "Beatmap Rating" }, `${(data.stats.score * 100).toFixed(2)}% 💯`), create("div", { title: "Beatmap Duration" }, `${number_to_timespan(data.metadata.duration)} ⏱`)); + } + function show_beastsaber_song_data(elem, data) { + intor(elem, create("div", { title: "Fun Factor" }, `${data.average_ratings.fun_factor} 😃`), create("div", { title: "Rhythm" }, `${data.average_ratings.rhythm} 🎶`), create("div", { title: "Flow" }, `${data.average_ratings.flow} 🌊`), create("div", { title: "Pattern Quality" }, `${data.average_ratings.pattern_quality} 💠`), create("div", { title: "Readability" }, `${data.average_ratings.readability} 👓`), create("div", { title: "Level Quality" }, `${data.average_ratings.level_quality} ✔️`)); + } + function generate_song_table_row(user_id, user, song) { + return create("tr", {}, create("td", { class: "picture" }), create("td", { class: "rank" }, "-"), create("td", { class: "player" }, generate_song_table_player(user_id, user)), create("td", { class: "score" }, song.score !== undefined ? format_en(song.score, 0) : "-"), create("td", { class: "timeset" }, moment(song.time).fromNow()), create("td", { class: "mods" }, song.mods !== undefined ? song.mods.toString() : "-"), create("td", { class: "percentage" }, song.accuracy ? (song.accuracy.toString() + "%") : "-"), create("td", { class: "pp" }, create("span", { class: "scoreTop ppValue" }, format_en(song.pp)), create("span", { class: "scoreTop ppLabel" }, "pp"))); + } + function generate_song_table_player(user_id, user) { + return create("a", { href: `${Global.scoresaber_link}/u/${user_id}` }, user.name); + } + function generate_tab(title, css_id, action, is_active, has_offset) { + const tabClass = `filter_tab ${toggled_class(is_active, "is-active")} ${toggled_class(has_offset, "offset_tab")}`; + return create("li", { + id: css_id, + class: tabClass, + }, create("a", { + class: "has-text-info", + onclick: () => { + document.querySelectorAll(".tabs > ul .filter_tab").forEach(x => x.classList.remove("is-active")); + check(document.getElementById(css_id)).classList.add("is-active"); + if (action) + action(); + } + }, title)); + } + function highlight_user() { + const home_user = get_home_user(); + if (!home_user) { + return; + } + const element = document.querySelector(`table.ranking.global a[href='/u/${home_user.id}']`); + if (element != null) { + element.parentElement.parentElement.style.backgroundColor = "var(--color-highlight)"; + } + } + function add_percentage() { + if (!is_song_leaderboard_page()) { + return; + } + const { song_hash, diff_name } = shared.get(); + if (!song_hash) { + return; + } + (async () => { + const data = await get_data_by_hash(song_hash); + if (!data) + return; + if (!diff_name) + return; + const version = data.versions.find((v) => v.hash === song_hash.toLowerCase()); + if (!diff_name || !version) + return; + const notes = get_notes_count(diff_name, "Standard", version); + if (notes < 0) + return; + const max_score = calculate_max_score(notes); + const user_scores = document.querySelectorAll("table.ranking.global tbody > tr"); + for (const score_row of user_scores) { + const percentage_column = check(score_row.querySelector("td.percentage")); + const percentage_value = percentage_column.innerText; + if (percentage_value === "-") { + const score = check(score_row.querySelector("td.score")).innerText; + const score_num = number_invariant(score); + const calculated_percentage = (100 * score_num / max_score).toFixed(2); + percentage_column.innerText = calculated_percentage + "%"; + } + } + })(); + } + + const PAGE = "user"; + function setup_dl_link_user_site() { + if (!is_user_page()) { + return; + } + const table = check(document.querySelector(".ranking.songs")); + const table_row = table.querySelectorAll(".table-item"); + for (const row of table_row) { + const image_link = check(row.querySelector(".song-container img")).src; + const song_hash = get_song_hash_from_text(image_link); + const col = create("div", { + class: "svelte-hij8c" + }); + into(row, col); + for (const btn of BMButton) { + into(col, create("span", { class: "compact", style: bmvar(PAGE, btn, "table-cell") }, as_fragment(target => new QuickButton({ + target, + props: { song_hash, size: "medium", type: btn } + })))); + } + } + } + function update_wide_table_css() { + if (!is_user_page()) { + return; + } + const table = check(document.querySelector(".ranking.songs")); + table.classList.toggle("wide_song_table", get_wide_table()); + } + + function get_state(elem) { + return !elem.classList.contains(elem.view_class); + } + function set_state(elem, state) { + if (state) { + elem.classList.remove(elem.view_class); + } + else { + elem.classList.add(elem.view_class); + } + } + function button(opt) { + var _a, _b; + const btn = create("div", { + class: "button" + }, opt.text); + btn.view_class = `is-${(_a = opt.type) !== null && _a !== void 0 ? _a : "primary"}`; + btn.on = () => { + var _a; + set_state(btn, true); + (_a = opt.onclick) === null || _a === void 0 ? void 0 : _a.call(btn, true); + }; + btn.off = () => { + var _a; + set_state(btn, false); + (_a = opt.onclick) === null || _a === void 0 ? void 0 : _a.call(btn, false); + }; + btn.toggle = () => { + var _a; + const state = !get_state(btn); + set_state(btn, state); + (_a = opt.onclick) === null || _a === void 0 ? void 0 : _a.call(btn, state); + }; + btn.onclick = () => { + if (btn.getAttribute("disabled") == null) { + btn.toggle(); + } + }; + set_state(btn, (_b = opt.default) !== null && _b !== void 0 ? _b : false); + return btn; + } + + let chart; + let chart_elem; + let chart_button; + function setup_pp_graph() { + if (!is_user_page()) { + return; + } + chart_elem = create("canvas"); + const chart_container = create("div", { + style: { + width: "100%", + height: "20em", + display: "none", + } + }, chart_elem); + insert_compare_display(chart_container); + chart_button = button({ + default: false, + text: "Show pp Graph", + onclick(active) { + if (!chart_elem) + return; + this.innerText = (active ? "Hide" : "Show") + " pp Graph"; + set_pp_graph_visibility(chart_container, active); + } + }); + insert_compare_feature(chart_button); + update_pp_graph_buttons(); + SseEvent.UserCacheChanged.register(update_pp_graph_buttons); + SseEvent.CompareUserChanged.register(update_pp_graph); + } + async function chartUserData(canvasContext, datasets, labels) { + if (chart !== undefined) { + chart.data = { + labels, + datasets + }; + chart.update(); + return; + } + if (!await load_chart_lib()) + return; + chart = new Chart(canvasContext, { + type: "line", + data: { + labels, + datasets, + }, + options: { + responsive: true, + maintainAspectRatio: false, + elements: { + point: { + radius: 2, + } + }, + tooltips: { + callbacks: { + label: tooltipItem => String(tooltipItem.yLabel), + title: () => "", + } + }, + scales: { + xAxes: [{ + display: false, + }] + } + }, + }); + } + function get_graph_data(user_id) { + const user = Global.user_list[user_id]; + if (user === undefined) + return []; + const data = []; + const data_scaled = []; + Object.values(user.songs) + .filter((song) => song.pp > 0) + .sort((a, b) => b.pp - a.pp) + .forEach((song, index) => { + const pp = song.pp; + data.push(pp); + data_scaled.push(+(pp * Math.pow(Global.pp_weighting_factor, index)).toFixed(2)); + }); + const color = (Number(user_id) % 3600) / 10; + return [{ + label: `${user.name} (song pp)`, + backgroundColor: `hsl(${color}, 100%, 50%)`, + borderColor: `hsl(${color}, 100%, 50%)`, + fill: false, + data, + }, { + label: `${user.name} (weighted pp)`, + backgroundColor: `hsl(${color}, 60%, 25%)`, + borderColor: `hsl(${color}, 60%, 25%)`, + fill: false, + data: data_scaled, + }]; + } + function update_pp_graph() { + if (chart_elem === undefined) + return; + let dataSets = get_graph_data(get_current_user().id); + const compare_user = get_compare_user(); + if (get_current_user().id !== compare_user && compare_user !== undefined) + dataSets = [...dataSets, ...get_graph_data(compare_user)]; + let max = 0; + for (const set of dataSets) { + max = Math.max(max, set.data.length); + } + for (const set of dataSets) { + if (set.data.length < max) { + set.data.length = max; + set.data.fill(0, set.data.length, max); + } + } + const labels = Array(max); + labels.fill("Song", 0, max); + chartUserData(check(chart_elem.getContext("2d")), dataSets, labels); + } + function update_pp_graph_buttons() { + if (!chart_button) { + return; + } + const user = get_current_user(); + if (Global.user_list[user.id] === undefined) { + chart_button.setAttribute("disabled", ""); + chart_button.setAttribute("data-tooltip", "Add the user to your score cache for this feature"); + chart_button.off(); + } + else { + chart_button.removeAttribute("disabled"); + chart_button.removeAttribute("data-tooltip"); + } + } + function set_pp_graph_visibility(elem, active) { + if (active) { + if (!chart) { + update_pp_graph(); + } + elem.style.display = ""; + } + else { + elem.style.display = "none"; + } + } + + const themes = ["Default", "Cerulean", "Cosmo", "Cyborg", "Darkly", "Flatly", + "Journal", "Litera", "Lumen", "Lux", "Materia", "Minty", "Nuclear", "Pulse", + "Sandstone", "Simplex", "Slate", "Solar", "Spacelab", "Superhero", "United", + "Yeti"]; + const dark_themes = ["Cyborg", "Darkly", "Nuclear", "Slate", "Solar", "Superhero"]; const theme_light = `:root { --color-ahead: rgb(128, 255, 128); --color-behind: rgb(255, 128, 128); --color-highlight: lightgreen; -}`; +}`; const theme_dark = `:root { --color-ahead: rgb(0, 128, 0); --color-behind: rgb(128, 0, 0); @@ -2554,8 +2341,8 @@ span.songBottom.time, span.scoreBottom, span.scoreTop.ppWeightedValue { } span.songTop.pp, span.scoreTop.ppValue, span.scoreTop.ppLabel, span.songTop.mapper { text-shadow: 1px 1px 2px #000; -}`; - function setup$1() { +}`; + function setup$1() { const style_data = `.compact { padding-right: 0 !important; padding-left: 0 !important; @@ -2672,43 +2459,43 @@ h5 > * { color: var(--textColor, black); background-color: var(--background, white); } -`; - SSE_addStyle(style_data); - into(document.head, create("link", { rel: "stylesheet", href: "https://cdn.jsdelivr.net/npm/bulma-checkradio/dist/css/bulma-checkradio.min.css" })); +`; + SSE_addStyle(style_data); + into(document.head, create("link", { rel: "stylesheet", href: "https://cdn.jsdelivr.net/npm/bulma-checkradio/dist/css/bulma-checkradio.min.css" })); } - /* src\components\SettingsDialogue.svelte generated by Svelte v3.44.1 */ + /* src/components/SettingsDialogue.svelte generated by Svelte v3.41.0 */ function get_each_context(ctx, list, i) { const child_ctx = ctx.slice(); - child_ctx[15] = list[i]; + child_ctx[16] = list[i]; return child_ctx; } function get_each_context_1(ctx, list, i) { const child_ctx = ctx.slice(); - child_ctx[18] = list[i]; + child_ctx[19] = list[i]; return child_ctx; } function get_each_context_2(ctx, list, i) { const child_ctx = ctx.slice(); - child_ctx[18] = list[i]; + child_ctx[19] = list[i]; return child_ctx; } function get_each_context_3(ctx, list, i) { const child_ctx = ctx.slice(); - child_ctx[23] = list[i]; + child_ctx[24] = list[i]; return child_ctx; } - // (104:5) {#each themes as name} + // (122:5) {#each themes as name} function create_each_block_3(ctx) { let option; - let t0_value = /*name*/ ctx[23] + ""; + let t0_value = /*name*/ ctx[24] + ""; let t0; - let t1_value = (dark_themes.includes(/*name*/ ctx[23]) ? " (Dark)" : "") + ""; + let t1_value = (dark_themes.includes(/*name*/ ctx[24]) ? " (Dark)" : "") + ""; let t1; let t2; let option_value_value; @@ -2720,9 +2507,9 @@ h5 > * { t0 = text(t0_value); t1 = text(t1_value); t2 = space(); - option.__value = option_value_value = /*name*/ ctx[23]; + option.__value = option_value_value = /*name*/ ctx[24]; option.value = option.__value; - option.selected = option_selected_value = /*name*/ ctx[23] === /*current_theme*/ ctx[0]; + option.selected = option_selected_value = /*name*/ ctx[24] === /*current_theme*/ ctx[0]; }, m(target, anchor) { insert(target, option, anchor); @@ -2731,7 +2518,7 @@ h5 > * { append(option, t2); }, p(ctx, dirty) { - if (dirty & /*current_theme, themes*/ 1 && option_selected_value !== (option_selected_value = /*name*/ ctx[23] === /*current_theme*/ ctx[0])) { + if (dirty & /*current_theme, themes*/ 1 && option_selected_value !== (option_selected_value = /*name*/ ctx[24] === /*current_theme*/ ctx[0])) { option.selected = option_selected_value; } }, @@ -2741,7 +2528,7 @@ h5 > * { }; } - // (136:3) {#each env.BMButton as button} + // (154:3) {#each env.BMButton as button} function create_each_block_2(ctx) { let th; let quickbutton; @@ -2752,7 +2539,7 @@ h5 > * { props: { size: "medium", song_hash: undefined, - type: /*button*/ ctx[18], + type: /*button*/ ctx[19], preview: true } }); @@ -2786,7 +2573,7 @@ h5 > * { }; } - // (150:4) {#each env.BMButton as button} + // (168:4) {#each env.BMButton as button} function create_each_block_1(ctx) { let td; let input; @@ -2802,12 +2589,12 @@ h5 > * { input = element("input"); t = space(); label = element("label"); - attr(input, "id", "show-" + /*page*/ ctx[15] + "-" + /*button*/ ctx[18]); + attr(input, "id", "show-" + /*page*/ ctx[16] + "-" + /*button*/ ctx[19]); attr(input, "type", "checkbox"); attr(input, "class", "is-checkradio"); - attr(input, "data-key", "" + (/*page*/ ctx[15] + "-" + /*button*/ ctx[18])); - input.checked = input_checked_value = /*bm*/ ctx[2][`${/*page*/ ctx[15]}-${/*button*/ ctx[18]}`]; - attr(label, "for", "show-" + /*page*/ ctx[15] + "-" + /*button*/ ctx[18]); + attr(input, "data-key", "" + (/*page*/ ctx[16] + "-" + /*button*/ ctx[19])); + input.checked = input_checked_value = /*bm*/ ctx[2][`${/*page*/ ctx[16]}-${/*button*/ ctx[19]}`]; + attr(label, "for", "show-" + /*page*/ ctx[16] + "-" + /*button*/ ctx[19]); }, m(target, anchor) { insert(target, td, anchor); @@ -2821,7 +2608,7 @@ h5 > * { } }, p(ctx, dirty) { - if (dirty & /*bm*/ 4 && input_checked_value !== (input_checked_value = /*bm*/ ctx[2][`${/*page*/ ctx[15]}-${/*button*/ ctx[18]}`])) { + if (dirty & /*bm*/ 4 && input_checked_value !== (input_checked_value = /*bm*/ ctx[2][`${/*page*/ ctx[16]}-${/*button*/ ctx[19]}`])) { input.checked = input_checked_value; } }, @@ -2833,11 +2620,11 @@ h5 > * { }; } - // (147:2) {#each env.BMPage as page} + // (165:2) {#each env.BMPage as page} function create_each_block(ctx) { let tr; let td; - let t0_value = /*page*/ ctx[15] + ""; + let t0_value = /*page*/ ctx[16] + ""; let t0; let t1; let t2; @@ -3299,7 +3086,44 @@ h5 > * { } function instance($$self, $$props, $$invalidate) { + var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P + ? value + : new P(function (resolve) { + resolve(value); + }); + } + + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch(e) { + reject(e); + } + } + + function rejected(value) { + try { + step(generator["throw"](value)); + } catch(e) { + reject(e); + } + } + + function step(result) { + result.done + ? resolve(result.value) + : adopt(result.value).then(fulfilled, rejected); + } + + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; + var _a; + let current_theme = (_a = localStorage.getItem("theme_name")) !== null && _a !== void 0 ? _a @@ -3318,22 +3142,26 @@ h5 > * { set_use_new_ss_api(this.checked); } - async function updateAllUser() { - await fetch_all(); + function updateAllUser() { + return __awaiter(this, void 0, void 0, function* () { + yield fetch_all(); + }); } - async function forceUpdateAllUser() { - const resp = await show_modal({ - text: "Warning: This might take a long time, depending " + "on how many users you have in your library list and " + "how many songs they have on ScoreSaber.\n" + "Use this only when all pp is fucked again.\n" + "And have mercy on the ScoreSaber servers.", - buttons: { - ok: { text: "Continue", class: "is-success" }, - x: { text: "Cancel", class: "is-danger" } + function forceUpdateAllUser() { + return __awaiter(this, void 0, void 0, function* () { + const resp = yield show_modal({ + text: "Warning: This might take a long time, depending " + "on how many users you have in your library list and " + "how many songs they have on ScoreSaber.\n" + "Use this only when all pp is fucked again.\n" + "And have mercy on the ScoreSaber servers.", + buttons: { + ok: { text: "Continue", class: "is-success" }, + x: { text: "Cancel", class: "is-danger" } + } + }); + + if (resp === "ok") { + yield fetch_all(true); } }); - - if (resp === "ok") { - await fetch_all(true); - } } function onChangeBeastSaber() { @@ -3343,37 +3171,41 @@ h5 > * { let isBeastSaberSyncing = false; - async function beastSaberSync() { - const bsaber_username = get_bsaber_username(); + function beastSaberSync() { + return __awaiter(this, void 0, void 0, function* () { + const bsaber_username = get_bsaber_username(); - if (!bsaber_username) { - await show_modal({ - text: "Please enter a username first.", - buttons: buttons.OkOnly - }); + if (!bsaber_username) { + yield show_modal({ + text: "Please enter a username first.", + buttons: buttons.OkOnly + }); - return; - } + return; + } - $$invalidate(1, isBeastSaberSyncing = true); - await update_bsaber_bookmark_cache(bsaber_username); - $$invalidate(1, isBeastSaberSyncing = false); + $$invalidate(1, isBeastSaberSyncing = true); + yield update_bsaber_bookmark_cache(bsaber_username); + $$invalidate(1, isBeastSaberSyncing = false); + }); } - async function update_bsaber_bookmark_cache(username) { - for (let page = 1; ; page++) { - SseEvent.StatusInfo.invoke({ text: `Loading BeastSaber page ${page}` }); - const bookmarks = await get_bookmarks(username, page, 50); - if (!bookmarks) break; - process_bookmarks(bookmarks.songs); + function update_bsaber_bookmark_cache(username) { + return __awaiter(this, void 0, void 0, function* () { + for (let page = 1; ; page++) { + SseEvent.StatusInfo.invoke({ text: `Loading BeastSaber page ${page}` }); + const bookmarks = yield get_bookmarks(username, page, 50); + if (!bookmarks) break; + process_bookmarks(bookmarks.songs); - if (bookmarks.next_page === null) { - break; + if (bookmarks.next_page === null) { + break; + } } - } - SseEvent.StatusInfo.invoke({ - text: "Finished loading BeastSaber bookmarks" + SseEvent.StatusInfo.invoke({ + text: "Finished loading BeastSaber bookmarks" + }); }); } @@ -3428,175 +3260,170 @@ h5 > * { } } - let notify_box; - let settings_modal; - function setup() { - notify_box = create("div", { class: "field" }); - const cog = create("i", { class: "fas fa-cog" }); - into(get_navbar(), create("a", { - id: "settings_menu", - class: "navbar-item", - style: { - cursor: "pointer", - }, - onclick: () => show_settings_lazy(), - }, cog)); - SseEvent.UserNotification.register(() => { - const ntfys = SseEvent.getNotifications(); - if (ntfys.length > 0) { - cog.classList.remove("fa-cog"); - cog.classList.add("fa-bell"); - cog.style.color = "yellow"; - } - else { - cog.classList.remove("fa-bell"); - cog.classList.add("fa-cog"); - cog.style.color = ""; - } - if (!notify_box) - return; - clear_children(notify_box); - for (const ntfy of ntfys) { - into(notify_box, create("div", { class: `notification is-${ntfy.type}` }, ntfy.msg)); - } - }); - } - function show_settings_lazy() { - if (settings_modal) { - settings_modal.show(); - return; - } - const status_box = create("div", {}); - SseEvent.StatusInfo.register((status) => intor(status_box, status.text)); - const set_div = create("div"); - new SettingsDialogue({ target: set_div }); - settings_modal = create_modal({ - title: "Options", - text: set_div, - footer: status_box, - type: "card", - default: true, - }); - } - async function settings_set_theme(name) { - let css = ""; - if (name !== "Default") { - css = await fetch2(`https://unpkg.com/bulmaswatch/${name.toLowerCase()}/bulmaswatch.min.css`); - } - localStorage.setItem("theme_name", name); - localStorage.setItem("theme_css", css); - load_theme(name, css); - } - function load_last_theme() { - let theme_name = localStorage.getItem("theme_name"); - let theme_css = localStorage.getItem("theme_css"); - if (!theme_name || !theme_css) { - theme_name = "Default"; - theme_css = ""; - } - load_theme(theme_name, theme_css); - } - function load_theme(name, css) { - let css_fin; - if (get_scoresaber_darkmode() || dark_themes.includes(name)) { - css_fin = css + " " + theme_dark; - } - else { - css_fin = css + " " + theme_light; - } - if (!Global.style_themed_elem) { - Global.style_themed_elem = SSE_addStyle(css_fin); - } - else { - Global.style_themed_elem.innerHTML = css_fin; - } - } - function get_scoresaber_darkmode() { - return document.cookie.includes("dark=1"); - } - function update_button_visibility() { - const bm = get_button_matrix(); - for (const pb of BMPageButtons) { - const showButton = bm[pb] || false; - document.documentElement.style.setProperty(`--sse-show-${pb}`, showButton ? "unset" : "none"); - } - } - - async function check_for_updates() { - const current_version = SSE_info.script.version; - const update_check = localStorage.getItem("update_check"); - if (update_check && Number(update_check) >= new Date().getTime()) { - return; - } - const latest_script = await fetch2(`https://raw.githubusercontent.com/Splamy/ScoreSaberEnhanced/master/scoresaber.user.js`); - const latest_version = Global.script_version_reg.exec(latest_script)[1]; - if (current_version !== latest_version) { - SseEvent.addNotification({ msg: "An update is available", type: "warning" }); - } - else { - const now = new Date(); - now.setDate(now.getDate() + 1); - localStorage.setItem("update_check", now.getTime().toString()); - } - } - - setup$3(); - setup$2(); - load(); - let has_loaded_head = false; - function on_load_head() { - if (!document.head) { - logc("Head not ready"); - return; - } - if (has_loaded_head) { - logc("Already loaded head"); - return; - } - has_loaded_head = true; - logc("Loading head"); - setup$1(); - load_last_theme(); - } - let has_loaded_body = false; - function on_load_body() { - if (document.readyState !== "complete" && document.readyState !== "interactive") { - logc("Body not ready"); - return; - } - if (has_loaded_body) { - logc("Already loaded body"); - return; - } - has_loaded_body = true; - logc("Loading body"); - setup_dl_link_user_site(); - add_percentage(); - setup_user_rank_link_swap(); - setup_song_rank_link_swap(); - update_wide_table_css(); - setup_dl_link_leaderboard(); - setup_song_filter_tabs(); - highlight_user(); - add_percentage$1(); - setup_links_songlist(); - setup_extra_filter_checkboxes(); - apply_extra_filters(); - setup_self_pin_button(); - setup_self_button(); - setup_user_compare(); - setup(); - update_button_visibility(); - setup_pp_graph(); - check_for_updates(); - } - function onload() { - on_load_head(); - on_load_body(); - } - onload(); - window.addEventListener("DOMContentLoaded", onload); - window.addEventListener("load", onload); + let notify_box; + let settings_modal; + function setup() { + notify_box = create("div", { class: "field" }); + const cog = create("i", { class: "fas fa-cog" }); + into(get_navbar(), create("a", { + id: "settings_menu", + class: "navbar-item", + style: { + cursor: "pointer", + }, + onclick: () => show_settings_lazy(), + }, cog)); + SseEvent.UserNotification.register(() => { + const ntfys = SseEvent.getNotifications(); + if (ntfys.length > 0) { + cog.classList.remove("fa-cog"); + cog.classList.add("fa-bell"); + cog.style.color = "yellow"; + } + else { + cog.classList.remove("fa-bell"); + cog.classList.add("fa-cog"); + cog.style.color = ""; + } + if (!notify_box) + return; + clear_children(notify_box); + for (const ntfy of ntfys) { + into(notify_box, create("div", { class: `notification is-${ntfy.type}` }, ntfy.msg)); + } + }); + } + function show_settings_lazy() { + if (settings_modal) { + settings_modal.show(); + return; + } + const status_box = create("div", {}); + SseEvent.StatusInfo.register((status) => intor(status_box, status.text)); + const set_div = create("div"); + new SettingsDialogue({ target: set_div }); + settings_modal = create_modal({ + title: "Options", + text: set_div, + footer: status_box, + type: "card", + default: true, + }); + } + async function settings_set_theme(name) { + let css = ""; + if (name !== "Default") { + css = await fetch2(`https://unpkg.com/bulmaswatch/${name.toLowerCase()}/bulmaswatch.min.css`); + } + localStorage.setItem("theme_name", name); + localStorage.setItem("theme_css", css); + load_theme(name, css); + } + function load_last_theme() { + let theme_name = localStorage.getItem("theme_name"); + let theme_css = localStorage.getItem("theme_css"); + if (!theme_name || !theme_css) { + theme_name = "Default"; + theme_css = ""; + } + load_theme(theme_name, theme_css); + } + function load_theme(name, css) { + let css_fin; + if (get_scoresaber_darkmode() || dark_themes.includes(name)) { + css_fin = css + " " + theme_dark; + } + else { + css_fin = css + " " + theme_light; + } + if (!Global.style_themed_elem) { + Global.style_themed_elem = SSE_addStyle(css_fin); + } + else { + Global.style_themed_elem.innerHTML = css_fin; + } + } + function get_scoresaber_darkmode() { + return document.cookie.includes("dark=1"); + } + function update_button_visibility() { + const bm = get_button_matrix(); + for (const pb of BMPageButtons) { + const showButton = bm[pb] || false; + document.documentElement.style.setProperty(`--sse-show-${pb}`, showButton ? "unset" : "none"); + } + } + + async function check_for_updates() { + const current_version = SSE_info.script.version; + const update_check = localStorage.getItem("update_check"); + if (update_check && Number(update_check) >= new Date().getTime()) { + return; + } + const latest_script = await fetch2(`https://raw.githubusercontent.com/Splamy/ScoreSaberEnhanced/master/scoresaber.user.js`); + const latest_version = Global.script_version_reg.exec(latest_script)[1]; + if (current_version !== latest_version) { + SseEvent.addNotification({ msg: "An update is available", type: "warning" }); + } + else { + const now = new Date(); + now.setDate(now.getDate() + 1); + localStorage.setItem("update_check", now.getTime().toString()); + } + } + + setup$3(); + setup$2(); + load(); + let has_loaded_head = false; + function on_load_head() { + if (!document.head) { + logc("Head not ready"); + return; + } + if (has_loaded_head) { + logc("Already loaded head"); + return; + } + has_loaded_head = true; + logc("Loading head"); + setup$1(); + load_last_theme(); + } + let has_loaded_body = false; + function on_load_body() { + if (document.readyState !== "complete" && document.readyState !== "interactive") { + logc("Body not ready"); + return; + } + if (has_loaded_body) { + logc("Already loaded body"); + return; + } + logc("Loading body"); + setup_dl_link_user_site(); + update_wide_table_css(); + setup_dl_link_leaderboard(); + setup_song_filter_tabs(); + highlight_user(); + add_percentage(); + setup_links_songlist(); + setup_extra_filter_checkboxes(); + apply_extra_filters(); + setup_self_pin_button(); + setup_self_button(); + setup_user_compare(); + setup(); + update_button_visibility(); + setup_pp_graph(); + check_for_updates(); + has_loaded_body = true; + } + function onload() { + on_load_head(); + on_load_body(); + } + setInterval(onload, 1000); })(); //# sourceMappingURL=rollup.js.map diff --git a/src/api/scoresaber.ts b/src/api/scoresaber.ts index e551d89..9da6d0f 100644 --- a/src/api/scoresaber.ts +++ b/src/api/scoresaber.ts @@ -12,11 +12,7 @@ const API_LIMITER = new Limiter(); export async function get_user_recent_songs_dynamic(user_id: string, page: number): Promise { logc(`Fetching user ${user_id} page ${page}`); - if (get_use_new_ss_api()) { - return get_user_recent_songs_new_api_wrap(user_id, page); - } else { - return get_user_recent_songs_old_api_wrap(user_id, page); - } + return get_user_recent_songs_new_api_wrap(user_id, page); } // NEW API ==================================================================== diff --git a/src/compare.ts b/src/compare.ts index 549c07c..a815e7c 100644 --- a/src/compare.ts +++ b/src/compare.ts @@ -43,8 +43,8 @@ export function setup_user_compare(): void { update_user_compare_dropdown(); SseEvent.UserCacheChanged.register(update_user_compare_dropdown); - SseEvent.UserCacheChanged.register(update_user_compare_songtable); - SseEvent.CompareUserChanged.register(update_user_compare_songtable); + //SseEvent.UserCacheChanged.register(update_user_compare_songtable); + //SseEvent.CompareUserChanged.register(update_user_compare_songtable); SseEvent.CompareUserChanged.invoke(); } diff --git a/src/components/QuickButton.svelte b/src/components/QuickButton.svelte index 474c31c..a31a0ff 100644 --- a/src/components/QuickButton.svelte +++ b/src/components/QuickButton.svelte @@ -132,6 +132,7 @@ div { padding: 0; cursor: pointer; + z-index: 10; } div:disabled { cursor: default; diff --git a/src/env.ts b/src/env.ts index 9394f7e..07a8fdd 100644 --- a/src/env.ts +++ b/src/env.ts @@ -3,12 +3,12 @@ import g from "./global"; import { create, into } from "./util/dom"; import { check } from "./util/err"; -export function get_user_header(): HTMLHeadingElement { - return check(document.querySelector(".content div.columns h5")); +export function get_user_header(): HTMLElement { + return check(document.querySelector(".player-link")); } export function get_navbar(): HTMLDivElement { - return check(document.querySelector("#navMenu div.navbar-start")); + return check(document.querySelector("nav")); } export function is_user_page(): boolean { @@ -28,7 +28,7 @@ export function get_current_user(): IUser { } export function get_document_user(doc: Document): IUser { - const username_elem = check(doc.querySelector(".content .title a")); + const username_elem = check(doc.querySelector(".player-link")); const user_name = username_elem.innerText.trim(); // TODO will be wrong when calling from a different page const user_id = g.user_reg.exec(window.location.href)![1]; @@ -88,7 +88,7 @@ export function insert_compare_display(elem: HTMLElement): void { function setup_compare_feature_list(): void { if (g.feature_list === undefined) { // find the old dropdown elem to replace it with out container - const select_score_order_elem = check(document.querySelector(".content div.select")); + const select_score_order_elem = check(document.querySelector(".btn-group")); const parent_box_elem = check(select_score_order_elem.parentElement); g.feature_list = create("div", { class: "level-item" }); const level_box_elem = create("div", { class: "level" }, g.feature_list); diff --git a/src/main.ts b/src/main.ts index d9734aa..0ef14c2 100644 --- a/src/main.ts +++ b/src/main.ts @@ -33,13 +33,10 @@ function on_load_body(): void { return; } if (has_loaded_body) { log.logc("Already loaded body"); return; } - has_loaded_body = true; log.logc("Loading body"); page_user.setup_dl_link_user_site(); - page_user.add_percentage(); - page_user.setup_user_rank_link_swap(); - page_user.setup_song_rank_link_swap(); + //page_user.add_percentage(); page_user.update_wide_table_css(); page_song.setup_dl_link_leaderboard(); page_song.setup_song_filter_tabs(); @@ -55,6 +52,8 @@ function on_load_body(): void { settings.update_button_visibility(); ppgraph.setup_pp_graph(); updater.check_for_updates(); + + has_loaded_body = true; } function onload() { @@ -62,6 +61,4 @@ function onload() { on_load_body(); } -onload(); -window.addEventListener("DOMContentLoaded", onload); -window.addEventListener("load", onload); +setInterval(onload, 1000); diff --git a/src/pages/song.ts b/src/pages/song.ts index 1d226ce..0a1f23d 100644 --- a/src/pages/song.ts +++ b/src/pages/song.ts @@ -16,12 +16,12 @@ const PAGE: Pages = "song"; const shared = new Lazy(() => { // find the element we want to modify - let details_box = check(document.querySelector(".content .title.is-5")); - details_box = check(details_box.parentElement); + let details_box = check(document.querySelector(".title.is-5")); + details_box = check(details_box.parentElement.parentElement.parentElement); const song_hash = get_song_hash_from_text(details_box.innerHTML); - const diff_name = document.querySelector(`div.tabs li.is-active span`)?.innerText; + const diff_name = document.querySelector(`div.tabs a.selected`)?.innerText; return { song_hash, details_box, diff_name }; }); diff --git a/src/pages/user.ts b/src/pages/user.ts index d1b6b28..45897ac 100644 --- a/src/pages/user.ts +++ b/src/pages/user.ts @@ -13,30 +13,37 @@ export function setup_dl_link_user_site(): void { if (!is_user_page()) { return; } // find the table we want to modify - const table = check(document.querySelector("table.ranking.songs")); + const table = check(document.querySelector(".ranking.songs")); // add a new column for our links - const table_tr = check(table.querySelector("thead tr")); + /* + const table_tr = check(table.querySelector(".table-item")); for (const btn of BMButton) { into(table_tr, - create("th", { - class: "compact", + create("div", { + class: "compact svelte-hij8c", // TODO: might not be static style: bmvar(PAGE, btn, "table-cell"), // TODO: Tooltip is currently cut off at the to due to div nesting //data: { tooltip: BMButtonHelp[btn].long }, }, BMButtonHelp[btn].short) ); } + * */ // add a link for each song - const table_row = table.querySelectorAll("tbody tr"); + const table_row = table.querySelectorAll(".table-item"); for (const row of table_row) { - const image_link = check(row.querySelector("th.song img")).src; + const image_link = check(row.querySelector(".song-container img")).src; const song_hash = get_song_hash_from_text(image_link); - + + const col = create("div", { + class: "svelte-hij8c" + }); + into(row, col); + for (const btn of BMButton) { - into(row, - create("th", { class: "compact", style: bmvar(PAGE, btn, "table-cell") }, + into(col, + create("span", { class: "compact", style: bmvar(PAGE, btn, "table-cell") }, as_fragment(target => new QuickButton({ target, props: { song_hash, size: "medium", type: btn } @@ -52,56 +59,15 @@ export function setup_dl_link_user_site(): void { export function update_wide_table_css(): void { if (!is_user_page()) { return; } - const table = check(document.querySelector("table.ranking.songs")); + const table = check(document.querySelector(".ranking.songs")); table.classList.toggle("wide_song_table", get_wide_table()); } // ** Link util ** -export function setup_user_rank_link_swap(): void { - if (!is_user_page()) { return; } - - const elem_ranking_links = document.querySelectorAll(".content div.columns ul > li > a"); - console.assert(elem_ranking_links.length >= 2, elem_ranking_links); - // Global rank - const elem_global = elem_ranking_links[0]; - const res_global = check(g.leaderboard_rank_reg.exec(elem_global.innerText)); - const rank_global = number_invariant(res_global[1]); - elem_global.href = g.scoresaber_link + "/global/" + rank_to_page(rank_global, g.user_per_page_global_leaderboard); - // Country rank - const elem_country = elem_ranking_links[1]; - const res_country = check(g.leaderboard_rank_reg.exec(elem_country.innerText)); - const country_str = check(g.leaderboard_country_reg.exec(elem_country.href)); - const number_country = number_invariant(res_country[1]); - elem_country.href = g.scoresaber_link + - "/global/" + rank_to_page(number_country, g.user_per_page_global_leaderboard) + - "?country=" + country_str[2]; -} - -export function setup_song_rank_link_swap(): void { - if (!is_user_page()) { return; } - - const song_elems = document.querySelectorAll("table.ranking.songs tbody tr"); - for (const row of song_elems) { - const rank_elem = check(row.querySelector(".rank")); - // there's only one link, so 'a' will find it. - const leaderboard_link = check(row.querySelector("th.song a")).href; - const rank = number_invariant(rank_elem.innerText.slice(1)); - const rank_str = rank_elem.innerText; - rank_elem.innerHTML = ""; - into(rank_elem, - create("a", { - href: `${leaderboard_link}?page=${rank_to_page(rank, g.user_per_page_song_leaderboard)}` - }, rank_str) - ); - } -} - -function rank_to_page(rank: number, ranks_per_page: number): number { - return Math.max(Math.floor((rank + ranks_per_page - 1) / ranks_per_page), 1); -} - export function add_percentage(): void { + // TODO + return; if (!is_user_page()) { return; } // find the table we want to modify diff --git a/src/util/userscript.ts b/src/util/userscript.ts index c72e600..ed09a15 100644 --- a/src/util/userscript.ts +++ b/src/util/userscript.ts @@ -49,7 +49,7 @@ function GM_addStyle_custom(css: string): HTMLStyleElement { export async function load_chart_lib(): Promise { if (typeof Chart !== "function") { try { - const resp = await fetch("https://scoresaber.com/imports/js/chart.js"); + const resp = await fetch("https://old.scoresaber.com/imports/js/chart.js"); const js = await resp.text(); new Function(js)(); } catch (err) { diff --git a/yarn.lock b/yarn.lock index d524018..c85fca3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,3592 +3,3514 @@ "@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + "integrity" "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==" + "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" + "version" "7.12.11" dependencies: "@babel/highlight" "^7.10.4" "@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + "integrity" "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz" + "version" "7.10.4" "@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + "integrity" "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==" + "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-validator-identifier" "^7.10.4" - chalk "^2.0.0" - js-tokens "^4.0.0" + "chalk" "^2.0.0" + "js-tokens" "^4.0.0" "@eslint/eslintrc@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.3.0.tgz#d736d6963d7003b6514e6324bec9c602ac340318" - integrity sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - lodash "^4.17.20" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" + "integrity" "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==" + "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "ajv" "^6.12.4" + "debug" "^4.1.1" + "espree" "^7.3.0" + "globals" "^12.1.0" + "ignore" "^4.0.6" + "import-fresh" "^3.2.1" + "js-yaml" "^3.13.1" + "lodash" "^4.17.20" + "minimatch" "^3.0.4" + "strip-json-comments" "^3.1.1" "@eslint/eslintrc@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.4.tgz#dfe0ff7ba270848d10c5add0715e04964c034b31" - integrity sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.0.0" - globals "^13.9.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" + "integrity" "sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q==" + "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "ajv" "^6.12.4" + "debug" "^4.3.2" + "espree" "^9.0.0" + "globals" "^13.9.0" + "ignore" "^4.0.6" + "import-fresh" "^3.2.1" + "js-yaml" "^4.1.0" + "minimatch" "^3.0.4" + "strip-json-comments" "^3.1.1" "@humanwhocodes/config-array@^0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.6.0.tgz#b5621fdb3b32309d2d16575456cbc277fa8f021a" - integrity sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A== + "integrity" "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz" + "version" "0.6.0" dependencies: "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" + "debug" "^4.1.1" + "minimatch" "^3.0.4" "@humanwhocodes/object-schema@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" - integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== + "integrity" "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + "version" "1.2.1" -"@nodelib/fs.scandir@2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" - integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== +"@nodelib/fs.scandir@2.1.5": + "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + "version" "2.1.5" dependencies: - "@nodelib/fs.stat" "2.0.4" - run-parallel "^1.1.9" + "@nodelib/fs.stat" "2.0.5" + "run-parallel" "^1.1.9" -"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" - integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + "version" "2.0.5" "@nodelib/fs.walk@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" - integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + "version" "1.2.8" dependencies: - "@nodelib/fs.scandir" "2.1.4" - fastq "^1.6.0" + "@nodelib/fs.scandir" "2.1.5" + "fastq" "^1.6.0" "@rbnlffl/rollup-plugin-eslint@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@rbnlffl/rollup-plugin-eslint/-/rollup-plugin-eslint-2.0.0.tgz#4e4c6efb7bd1766a06b0f3558a3fc90c238250d2" - integrity sha512-ql5KeNKkJRdJAPpKiwoBjbYAESU1UtgYs1+YA3V9KU9uH7Eul/FNpF8rs4PkA81f61XHIXv1cMP2XOPwcdUryA== + "integrity" "sha512-ql5KeNKkJRdJAPpKiwoBjbYAESU1UtgYs1+YA3V9KU9uH7Eul/FNpF8rs4PkA81f61XHIXv1cMP2XOPwcdUryA==" + "resolved" "https://registry.npmjs.org/@rbnlffl/rollup-plugin-eslint/-/rollup-plugin-eslint-2.0.0.tgz" + "version" "2.0.0" dependencies: "@rollup/pluginutils" "4.x" - eslint "7.x" + "eslint" "7.x" "@rollup/plugin-commonjs@^21.0.1": - version "21.0.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.1.tgz#1e57c81ae1518e4df0954d681c642e7d94588fee" - integrity sha512-EA+g22lbNJ8p5kuZJUYyhhDK7WgJckW5g4pNN7n4mAFUM96VuwUnNT3xr2Db2iCZPI1pJPbGyfT5mS9T1dHfMg== + "integrity" "sha512-EA+g22lbNJ8p5kuZJUYyhhDK7WgJckW5g4pNN7n4mAFUM96VuwUnNT3xr2Db2iCZPI1pJPbGyfT5mS9T1dHfMg==" + "resolved" "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.1.tgz" + "version" "21.0.1" dependencies: "@rollup/pluginutils" "^3.1.0" - commondir "^1.0.1" - estree-walker "^2.0.1" - glob "^7.1.6" - is-reference "^1.2.1" - magic-string "^0.25.7" - resolve "^1.17.0" + "commondir" "^1.0.1" + "estree-walker" "^2.0.1" + "glob" "^7.1.6" + "is-reference" "^1.2.1" + "magic-string" "^0.25.7" + "resolve" "^1.17.0" "@rollup/plugin-node-resolve@^13.0.4": - version "13.0.6" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.6.tgz#29629070bb767567be8157f575cfa8f2b8e9ef77" - integrity sha512-sFsPDMPd4gMqnh2gS0uIxELnoRUp5kBl5knxD2EO0778G1oOJv4G1vyT2cpWz75OU2jDVcXhjVUuTAczGyFNKA== + "integrity" "sha512-eYq4TFy40O8hjeDs+sIxEH/jc9lyuI2k9DM557WN6rO5OpnC2qXMBNj4IKH1oHrnAazL49C5p0tgP0/VpqJ+/w==" + "resolved" "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.4.tgz" + "version" "13.0.4" dependencies: "@rollup/pluginutils" "^3.1.0" "@types/resolve" "1.17.1" - builtin-modules "^3.1.0" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.19.0" + "builtin-modules" "^3.1.0" + "deepmerge" "^4.2.2" + "is-module" "^1.0.0" + "resolve" "^1.19.0" "@rollup/plugin-typescript@8.3.0": - version "8.3.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-8.3.0.tgz#bc1077fa5897b980fc27e376c4e377882c63e68b" - integrity sha512-I5FpSvLbtAdwJ+naznv+B4sjXZUcIvLLceYpITAn7wAP8W0wqc5noLdGIp9HGVntNhRWXctwPYrSSFQxtl0FPA== + "integrity" "sha512-I5FpSvLbtAdwJ+naznv+B4sjXZUcIvLLceYpITAn7wAP8W0wqc5noLdGIp9HGVntNhRWXctwPYrSSFQxtl0FPA==" + "resolved" "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.3.0.tgz" + "version" "8.3.0" dependencies: "@rollup/pluginutils" "^3.1.0" - resolve "^1.17.0" - -"@rollup/pluginutils@4.x": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.1.0.tgz#0dcc61c780e39257554feb7f77207dceca13c838" - integrity sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ== - dependencies: - estree-walker "^2.0.1" - picomatch "^2.2.2" + "resolve" "^1.17.0" "@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + "integrity" "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==" + "resolved" "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz" + "version" "3.1.0" dependencies: "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" + "estree-walker" "^1.0.1" + "picomatch" "^2.2.2" + +"@rollup/pluginutils@4.x": + "integrity" "sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==" + "resolved" "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "estree-walker" "^2.0.1" + "picomatch" "^2.2.2" "@types/estree@*": - version "0.0.50" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" - integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== + "integrity" "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" + "resolved" "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz" + "version" "0.0.50" "@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + "integrity" "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + "resolved" "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" + "version" "0.0.39" "@types/expect@^1.20.4": - version "1.20.4" - resolved "https://registry.yarnpkg.com/@types/expect/-/expect-1.20.4.tgz#8288e51737bf7e3ab5d7c77bfa695883745264e5" - integrity sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg== + "integrity" "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==" + "resolved" "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz" + "version" "1.20.4" "@types/json-schema@^7.0.9": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== + "integrity" "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" + "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz" + "version" "7.0.9" "@types/node@*": - version "16.11.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.6.tgz#6bef7a2a0ad684cf6e90fcfe31cecabd9ce0a3ae" - integrity sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w== + "integrity" "sha512-p68+a+KoxpoB47015IeYZYRrdqMUcpbK8re/zpFB8Ld46LHC1lPEbp3EXgkEhAYEcPvjJF6ZO+869SQ0aH1dcA==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-15.0.2.tgz" + "version" "15.0.2" "@types/node@^14.14.41": - version "14.14.44" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.44.tgz#df7503e6002847b834371c004b372529f3f85215" - integrity sha512-+gaugz6Oce6ZInfI/tK4Pq5wIIkJMEJUu92RB3Eu93mtj4wjjjz9EB5mLp5s1pSsLXdC/CPut/xF20ZzAQJbTA== + "integrity" "sha512-+gaugz6Oce6ZInfI/tK4Pq5wIIkJMEJUu92RB3Eu93mtj4wjjjz9EB5mLp5s1pSsLXdC/CPut/xF20ZzAQJbTA==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-14.14.44.tgz" + "version" "14.14.44" "@types/pug@^2.0.4": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@types/pug/-/pug-2.0.5.tgz#69bc700934dd473c7ab97270bd2dbacefe562231" - integrity sha512-LOnASQoeNZMkzexRuyqcBBDZ6rS+rQxUMkmj5A0PkhhiSZivLIuz6Hxyr1mkGoEZEkk66faROmpMi4fFkrKsBA== + "integrity" "sha512-LOnASQoeNZMkzexRuyqcBBDZ6rS+rQxUMkmj5A0PkhhiSZivLIuz6Hxyr1mkGoEZEkk66faROmpMi4fFkrKsBA==" + "resolved" "https://registry.npmjs.org/@types/pug/-/pug-2.0.5.tgz" + "version" "2.0.5" "@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + "integrity" "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==" + "resolved" "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz" + "version" "1.17.1" dependencies: "@types/node" "*" "@types/sass@^1.16.0": - version "1.43.0" - resolved "https://registry.yarnpkg.com/@types/sass/-/sass-1.43.0.tgz#b4cebe057d887ed66dc6813fd6cbef22043057bb" - integrity sha512-DPSXNJ1rYLo88GyF9tuB4bsYGfpKI1a4+wOQmc+LI1SUoocm9QLRSpz0GxxuyjmJsYFIQo/dDlRSSpIXngff+w== + "integrity" "sha512-iZUcRrGuz/Tbg3loODpW7vrQJkUtpY2fFSf4ELqqkApcS2TkZ1msk7ie8iZPB86lDOP8QOTTmuvWjc5S0R9OjQ==" + "resolved" "https://registry.npmjs.org/@types/sass/-/sass-1.16.1.tgz" + "version" "1.16.1" dependencies: "@types/node" "*" "@types/vinyl@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/vinyl/-/vinyl-2.0.4.tgz#9a7a8071c8d14d3a95d41ebe7135babe4ad5995a" - integrity sha512-2o6a2ixaVI2EbwBPg1QYLGQoHK56p/8X/sGfKbFC8N6sY9lfjsMf/GprtkQkSya0D4uRiutRZ2BWj7k3JvLsAQ== + "integrity" "sha512-2o6a2ixaVI2EbwBPg1QYLGQoHK56p/8X/sGfKbFC8N6sY9lfjsMf/GprtkQkSya0D4uRiutRZ2BWj7k3JvLsAQ==" + "resolved" "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.4.tgz" + "version" "2.0.4" dependencies: "@types/expect" "^1.20.4" "@types/node" "*" "@typescript-eslint/eslint-plugin@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.3.0.tgz#a55ae72d28ffeb6badd817fe4566c9cced1f5e29" - integrity sha512-ARUEJHJrq85aaiCqez7SANeahDsJTD3AEua34EoQN9pHS6S5Bq9emcIaGGySt/4X2zSi+vF5hAH52sEen7IO7g== + "integrity" "sha512-ARUEJHJrq85aaiCqez7SANeahDsJTD3AEua34EoQN9pHS6S5Bq9emcIaGGySt/4X2zSi+vF5hAH52sEen7IO7g==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.3.0.tgz" + "version" "5.3.0" dependencies: "@typescript-eslint/experimental-utils" "5.3.0" "@typescript-eslint/scope-manager" "5.3.0" - debug "^4.3.2" - functional-red-black-tree "^1.0.1" - ignore "^5.1.8" - regexpp "^3.2.0" - semver "^7.3.5" - tsutils "^3.21.0" + "debug" "^4.3.2" + "functional-red-black-tree" "^1.0.1" + "ignore" "^5.1.8" + "regexpp" "^3.2.0" + "semver" "^7.3.5" + "tsutils" "^3.21.0" "@typescript-eslint/experimental-utils@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.0.tgz#ee56b4957547ed2b0fc7451205e41502e664f546" - integrity sha512-NFVxYTjKj69qB0FM+piah1x3G/63WB8vCBMnlnEHUsiLzXSTWb9FmFn36FD9Zb4APKBLY3xRArOGSMQkuzTF1w== + "integrity" "sha512-NFVxYTjKj69qB0FM+piah1x3G/63WB8vCBMnlnEHUsiLzXSTWb9FmFn36FD9Zb4APKBLY3xRArOGSMQkuzTF1w==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.0.tgz" + "version" "5.3.0" dependencies: "@types/json-schema" "^7.0.9" "@typescript-eslint/scope-manager" "5.3.0" "@typescript-eslint/types" "5.3.0" "@typescript-eslint/typescript-estree" "5.3.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" + "eslint-scope" "^5.1.1" + "eslint-utils" "^3.0.0" -"@typescript-eslint/parser@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.3.0.tgz#7879f15e26d370ed3f653fb7dd06479531ed3ab9" - integrity sha512-rKu/yAReip7ovx8UwOAszJVO5MgBquo8WjIQcp1gx4pYQCwYzag+I5nVNHO4MqyMkAo0gWt2gWUi+36gWAVKcw== +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@5.3.0": + "integrity" "sha512-rKu/yAReip7ovx8UwOAszJVO5MgBquo8WjIQcp1gx4pYQCwYzag+I5nVNHO4MqyMkAo0gWt2gWUi+36gWAVKcw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.3.0.tgz" + "version" "5.3.0" dependencies: "@typescript-eslint/scope-manager" "5.3.0" "@typescript-eslint/types" "5.3.0" "@typescript-eslint/typescript-estree" "5.3.0" - debug "^4.3.2" + "debug" "^4.3.2" "@typescript-eslint/scope-manager@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.3.0.tgz#97d0ccc7c9158e89e202d5e24ce6ba49052d432e" - integrity sha512-22Uic9oRlTsPppy5Tcwfj+QET5RWEnZ5414Prby465XxQrQFZ6nnm5KnXgnsAJefG4hEgMnaxTB3kNEyjdjj6A== + "integrity" "sha512-22Uic9oRlTsPppy5Tcwfj+QET5RWEnZ5414Prby465XxQrQFZ6nnm5KnXgnsAJefG4hEgMnaxTB3kNEyjdjj6A==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.0.tgz" + "version" "5.3.0" dependencies: "@typescript-eslint/types" "5.3.0" "@typescript-eslint/visitor-keys" "5.3.0" "@typescript-eslint/types@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.3.0.tgz#af29fd53867c2df0028c57c36a655bd7e9e05416" - integrity sha512-fce5pG41/w8O6ahQEhXmMV+xuh4+GayzqEogN24EK+vECA3I6pUwKuLi5QbXO721EMitpQne5VKXofPonYlAQg== + "integrity" "sha512-fce5pG41/w8O6ahQEhXmMV+xuh4+GayzqEogN24EK+vECA3I6pUwKuLi5QbXO721EMitpQne5VKXofPonYlAQg==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.0.tgz" + "version" "5.3.0" "@typescript-eslint/typescript-estree@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.0.tgz#4f68ddd46dc2983182402d2ab21fb44ad94988cf" - integrity sha512-FJ0nqcaUOpn/6Z4Jwbtf+o0valjBLkqc3MWkMvrhA2TvzFXtcclIM8F4MBEmYa2kgcI8EZeSAzwoSrIC8JYkug== + "integrity" "sha512-FJ0nqcaUOpn/6Z4Jwbtf+o0valjBLkqc3MWkMvrhA2TvzFXtcclIM8F4MBEmYa2kgcI8EZeSAzwoSrIC8JYkug==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.0.tgz" + "version" "5.3.0" dependencies: "@typescript-eslint/types" "5.3.0" "@typescript-eslint/visitor-keys" "5.3.0" - debug "^4.3.2" - globby "^11.0.4" - is-glob "^4.0.3" - semver "^7.3.5" - tsutils "^3.21.0" + "debug" "^4.3.2" + "globby" "^11.0.4" + "is-glob" "^4.0.3" + "semver" "^7.3.5" + "tsutils" "^3.21.0" "@typescript-eslint/visitor-keys@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.0.tgz#a6258790f3b7b2547f70ed8d4a1e0c3499994523" - integrity sha512-oVIAfIQuq0x2TFDNLVavUn548WL+7hdhxYn+9j3YdJJXB7mH9dAmZNJsPDa7Jc+B9WGqoiex7GUDbyMxV0a/aw== + "integrity" "sha512-oVIAfIQuq0x2TFDNLVavUn548WL+7hdhxYn+9j3YdJJXB7mH9dAmZNJsPDa7Jc+B9WGqoiex7GUDbyMxV0a/aw==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.0.tgz" + "version" "5.3.0" dependencies: "@typescript-eslint/types" "5.3.0" - eslint-visitor-keys "^3.0.0" - -acorn-jsx@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== - -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" - integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== - -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^7.0.2: - version "7.1.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.1.1.tgz#1e6b37a454021fa9941713f38b952fc1c8d32a84" - integrity sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-colors@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" - integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== - dependencies: - ansi-wrap "^0.1.0" - -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-gray@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" - integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE= - dependencies: - ansi-wrap "0.1.0" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-wrap@0.1.0, ansi-wrap@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" - integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -append-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" - integrity sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE= - dependencies: - buffer-equal "^1.0.0" - -archy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-filter@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/arr-filter/-/arr-filter-1.1.2.tgz#43fdddd091e8ef11aa4c45d9cdc18e2dff1711ee" - integrity sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4= - dependencies: - make-iterator "^1.0.0" - -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-map@^2.0.0, arr-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/arr-map/-/arr-map-2.0.2.tgz#3a77345ffc1cf35e2a91825601f9e58f2e24cac4" - integrity sha1-Onc0X/wc814qkYJWAfnljy4kysQ= - dependencies: - make-iterator "^1.0.0" - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-each@^1.0.0, array-each@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" - integrity sha1-p5SvDAWrF1KEbudTofIRoFugxE8= - -array-initial@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.1.0.tgz#2fa74b26739371c3947bd7a7adc73be334b3d795" - integrity sha1-L6dLJnOTccOUe9enrcc74zSz15U= - dependencies: - array-slice "^1.0.0" - is-number "^4.0.0" - -array-last@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array-last/-/array-last-1.3.0.tgz#7aa77073fec565ddab2493f5f88185f404a9d336" - integrity sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg== - dependencies: - is-number "^4.0.0" - -array-slice@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" - integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== - -array-sort@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-sort/-/array-sort-1.0.0.tgz#e4c05356453f56f53512a7d1d6123f2c54c0a88a" - integrity sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg== - dependencies: - default-compare "^1.0.0" - get-value "^2.0.6" - kind-of "^5.0.2" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async-done@^1.2.0, async-done@^1.2.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/async-done/-/async-done-1.3.2.tgz#5e15aa729962a4b07414f528a88cdf18e0b290a2" - integrity sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.2" - process-nextick-args "^2.0.0" - stream-exhaust "^1.0.1" - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async-settle@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-settle/-/async-settle-1.0.0.tgz#1d0a914bb02575bec8a8f3a74e5080f72b2c0c6b" - integrity sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs= - dependencies: - async-done "^1.2.2" - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -bach@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880" - integrity sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA= - dependencies: - arr-filter "^1.1.1" - arr-flatten "^1.0.1" - arr-map "^2.0.0" - array-each "^1.0.0" - array-initial "^1.0.0" - array-last "^1.1.1" - async-done "^1.2.2" - async-settle "^1.0.0" - now-and-later "^2.0.0" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -binaryextensions@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.3.0.tgz#1d269cbf7e6243ea886aa41453c3651ccbe13c22" - integrity sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -buffer-crc32@^0.2.5: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - -buffer-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" - integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -builtin-modules@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" - integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= - -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chokidar@^2.0.0: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" + "eslint-visitor-keys" "^3.0.0" + +"acorn-jsx@^5.3.1": + "integrity" "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==" + "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz" + "version" "5.3.1" + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^7.4.0": + "integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" + "version" "7.4.1" + +"acorn@^8.6.0": + "integrity" "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz" + "version" "8.6.0" + +"ajv@^6.10.0", "ajv@^6.12.4": + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + "version" "6.12.6" + dependencies: + "fast-deep-equal" "^3.1.1" + "fast-json-stable-stringify" "^2.0.0" + "json-schema-traverse" "^0.4.1" + "uri-js" "^4.2.2" + +"ajv@^7.0.2": + "integrity" "sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-7.1.1.tgz" + "version" "7.1.1" + dependencies: + "fast-deep-equal" "^3.1.1" + "json-schema-traverse" "^1.0.0" + "require-from-string" "^2.0.2" + "uri-js" "^4.2.2" + +"ansi-colors@^1.0.1": + "integrity" "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==" + "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "ansi-wrap" "^0.1.0" + +"ansi-colors@^4.1.1": + "integrity" "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" + "version" "4.1.1" + +"ansi-gray@^0.1.1": + "integrity" "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=" + "resolved" "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz" + "version" "0.1.1" + dependencies: + "ansi-wrap" "0.1.0" + +"ansi-regex@^2.0.0": + "integrity" "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + "version" "2.1.1" + +"ansi-regex@^5.0.1": + "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + "version" "5.0.1" + +"ansi-styles@^3.2.1": + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "color-convert" "^1.9.0" + +"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "color-convert" "^2.0.1" + +"ansi-wrap@^0.1.0", "ansi-wrap@0.1.0": + "integrity" "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" + "resolved" "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz" + "version" "0.1.0" + +"anymatch@^2.0.0": + "integrity" "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "micromatch" "^3.1.4" + "normalize-path" "^2.1.1" + +"append-buffer@^1.0.2": + "integrity" "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=" + "resolved" "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "buffer-equal" "^1.0.0" + +"archy@^1.0.0": + "integrity" "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" + "resolved" "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" + "version" "1.0.0" + +"argparse@^1.0.7": + "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "sprintf-js" "~1.0.2" + +"argparse@^2.0.1": + "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + "version" "2.0.1" + +"arr-diff@^4.0.0": + "integrity" "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + "resolved" "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" + "version" "4.0.0" + +"arr-filter@^1.1.1": + "integrity" "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=" + "resolved" "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "make-iterator" "^1.0.0" + +"arr-flatten@^1.0.1", "arr-flatten@^1.1.0": + "integrity" "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + "resolved" "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" + "version" "1.1.0" + +"arr-map@^2.0.0", "arr-map@^2.0.2": + "integrity" "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=" + "resolved" "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "make-iterator" "^1.0.0" + +"arr-union@^3.1.0": + "integrity" "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + "resolved" "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" + "version" "3.1.0" + +"array-each@^1.0.0", "array-each@^1.0.1": + "integrity" "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=" + "resolved" "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz" + "version" "1.0.1" + +"array-initial@^1.0.0": + "integrity" "sha1-L6dLJnOTccOUe9enrcc74zSz15U=" + "resolved" "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "array-slice" "^1.0.0" + "is-number" "^4.0.0" + +"array-last@^1.1.1": + "integrity" "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==" + "resolved" "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "is-number" "^4.0.0" + +"array-slice@^1.0.0": + "integrity" "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==" + "resolved" "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz" + "version" "1.1.0" + +"array-sort@^1.0.0": + "integrity" "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==" + "resolved" "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "default-compare" "^1.0.0" + "get-value" "^2.0.6" + "kind-of" "^5.0.2" + +"array-union@^2.1.0": + "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + "version" "2.1.0" + +"array-unique@^0.3.2": + "integrity" "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + "resolved" "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" + "version" "0.3.2" + +"assign-symbols@^1.0.0": + "integrity" "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + "resolved" "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" + "version" "1.0.0" + +"astral-regex@^2.0.0": + "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + "version" "2.0.0" + +"async-done@^1.2.0", "async-done@^1.2.2": + "integrity" "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==" + "resolved" "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "end-of-stream" "^1.1.0" + "once" "^1.3.2" + "process-nextick-args" "^2.0.0" + "stream-exhaust" "^1.0.1" + +"async-each@^1.0.1": + "integrity" "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + "resolved" "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz" + "version" "1.0.3" + +"async-settle@^1.0.0": + "integrity" "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=" + "resolved" "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "async-done" "^1.2.2" + +"atob@^2.1.2": + "integrity" "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + "resolved" "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" + "version" "2.1.2" + +"bach@^1.0.0": + "integrity" "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=" + "resolved" "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "arr-filter" "^1.1.1" + "arr-flatten" "^1.0.1" + "arr-map" "^2.0.0" + "array-each" "^1.0.0" + "array-initial" "^1.0.0" + "array-last" "^1.1.1" + "async-done" "^1.2.2" + "async-settle" "^1.0.0" + "now-and-later" "^2.0.0" + +"balanced-match@^1.0.0": + "integrity" "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + "version" "1.0.0" + +"base@^0.11.1": + "integrity" "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==" + "resolved" "https://registry.npmjs.org/base/-/base-0.11.2.tgz" + "version" "0.11.2" + dependencies: + "cache-base" "^1.0.1" + "class-utils" "^0.3.5" + "component-emitter" "^1.2.1" + "define-property" "^1.0.0" + "isobject" "^3.0.1" + "mixin-deep" "^1.2.0" + "pascalcase" "^0.1.1" + +"binary-extensions@^1.0.0": + "integrity" "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz" + "version" "1.13.1" + +"binaryextensions@^2.2.0": + "integrity" "sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==" + "resolved" "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.3.0.tgz" + "version" "2.3.0" + +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" + dependencies: + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" + +"braces@^2.3.1", "braces@^2.3.2": + "integrity" "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==" + "resolved" "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" + "version" "2.3.2" + dependencies: + "arr-flatten" "^1.1.0" + "array-unique" "^0.3.2" + "extend-shallow" "^2.0.1" + "fill-range" "^4.0.0" + "isobject" "^3.0.1" + "repeat-element" "^1.1.2" + "snapdragon" "^0.8.1" + "snapdragon-node" "^2.0.1" + "split-string" "^3.0.2" + "to-regex" "^3.0.1" + +"braces@^3.0.1": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "fill-range" "^7.0.1" + +"buffer-equal@^1.0.0": + "integrity" "sha1-WWFrSYME1Var1GaWayLu2j7KX74=" + "resolved" "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz" + "version" "1.0.0" + +"buffer-from@^1.0.0": + "integrity" "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" + "version" "1.1.1" + +"builtin-modules@^3.1.0": + "integrity" "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==" + "resolved" "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz" + "version" "3.2.0" + +"cache-base@^1.0.1": + "integrity" "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==" + "resolved" "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "collection-visit" "^1.0.0" + "component-emitter" "^1.2.1" + "get-value" "^2.0.6" + "has-value" "^1.0.0" + "isobject" "^3.0.1" + "set-value" "^2.0.0" + "to-object-path" "^0.3.0" + "union-value" "^1.0.0" + "unset-value" "^1.0.0" + +"callsites@^3.0.0": + "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + "version" "3.1.0" + +"camelcase@^3.0.0": + "integrity" "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz" + "version" "3.0.0" + +"chalk@^2.0.0": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chalk@^4.0.0": + "integrity" "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chokidar@^2.0.0": + "integrity" "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz" + "version" "2.1.8" + dependencies: + "anymatch" "^2.0.0" + "async-each" "^1.0.1" + "braces" "^2.3.2" + "glob-parent" "^3.1.0" + "inherits" "^2.0.3" + "is-binary-path" "^1.0.0" + "is-glob" "^4.0.0" + "normalize-path" "^3.0.0" + "path-is-absolute" "^1.0.0" + "readdirp" "^2.2.1" + "upath" "^1.1.1" optionalDependencies: - fsevents "^1.2.7" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -clone-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" - integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= - -clone-stats@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" - integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= - -clone@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= - -cloneable-readable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" - integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== - dependencies: - inherits "^2.0.1" - process-nextick-args "^2.0.0" - readable-stream "^2.3.5" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -collection-map@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" - integrity sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw= - dependencies: - arr-map "^2.0.2" - for-own "^1.0.0" - make-iterator "^1.0.0" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -concat-with-sourcemaps@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz#d4ea93f05ae25790951b99e7b3b09e3908a4082e" - integrity sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg== - dependencies: - source-map "^0.6.1" - -convert-source-map@^1.5.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -copy-props@^2.0.1: - version "2.0.4" - resolved "https://registry.yarnpkg.com/copy-props/-/copy-props-2.0.4.tgz#93bb1cadfafd31da5bb8a9d4b41f471ec3a72dfe" - integrity sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A== - dependencies: - each-props "^1.3.0" - is-plain-object "^2.0.1" - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^4.0.1, debug@^4.1.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -debug@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== - dependencies: - ms "2.1.2" - -decamelize@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -deep-is@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + "fsevents" "^1.2.7" + +"class-utils@^0.3.5": + "integrity" "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==" + "resolved" "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" + "version" "0.3.6" + dependencies: + "arr-union" "^3.1.0" + "define-property" "^0.2.5" + "isobject" "^3.0.0" + "static-extend" "^0.1.1" + +"cliui@^3.2.0": + "integrity" "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "string-width" "^1.0.1" + "strip-ansi" "^3.0.1" + "wrap-ansi" "^2.0.0" + +"clone-buffer@^1.0.0": + "integrity" "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" + "resolved" "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz" + "version" "1.0.0" + +"clone-stats@^1.0.0": + "integrity" "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" + "resolved" "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz" + "version" "1.0.0" + +"clone@^2.1.1": + "integrity" "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + "resolved" "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" + "version" "2.1.2" + +"cloneable-readable@^1.0.0": + "integrity" "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==" + "resolved" "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "inherits" "^2.0.1" + "process-nextick-args" "^2.0.0" + "readable-stream" "^2.3.5" + +"code-point-at@^1.0.0": + "integrity" "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "resolved" "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" + "version" "1.1.0" + +"collection-map@^1.0.0": + "integrity" "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=" + "resolved" "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "arr-map" "^2.0.2" + "for-own" "^1.0.0" + "make-iterator" "^1.0.0" + +"collection-visit@^1.0.0": + "integrity" "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=" + "resolved" "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "map-visit" "^1.0.0" + "object-visit" "^1.0.0" + +"color-convert@^1.9.0": + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + "version" "1.9.3" + dependencies: + "color-name" "1.1.3" + +"color-convert@^2.0.1": + "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "color-name" "~1.1.4" + +"color-name@~1.1.4": + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + "version" "1.1.4" + +"color-name@1.1.3": + "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + "version" "1.1.3" + +"color-support@^1.1.3": + "integrity" "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + "resolved" "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + "version" "1.1.3" + +"commondir@^1.0.1": + "integrity" "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + "resolved" "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" + "version" "1.0.1" + +"component-emitter@^1.2.1": + "integrity" "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "resolved" "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" + "version" "1.3.0" + +"concat-map@0.0.1": + "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" + +"concat-stream@^1.6.0": + "integrity" "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==" + "resolved" "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + "version" "1.6.2" + dependencies: + "buffer-from" "^1.0.0" + "inherits" "^2.0.3" + "readable-stream" "^2.2.2" + "typedarray" "^0.0.6" + +"concat-with-sourcemaps@^1.0.0": + "integrity" "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==" + "resolved" "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "source-map" "^0.6.1" + +"convert-source-map@^1.5.0": + "integrity" "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==" + "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "safe-buffer" "~5.1.1" + +"copy-descriptor@^0.1.0": + "integrity" "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + "resolved" "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" + "version" "0.1.1" + +"copy-props@^2.0.1": + "integrity" "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==" + "resolved" "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "each-props" "^1.3.0" + "is-plain-object" "^2.0.1" + +"core-util-is@~1.0.0": + "integrity" "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + "version" "1.0.2" + +"cross-spawn@^7.0.2": + "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + "version" "7.0.3" + dependencies: + "path-key" "^3.1.0" + "shebang-command" "^2.0.0" + "which" "^2.0.1" + +"d@^1.0.1", "d@1": + "integrity" "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==" + "resolved" "https://registry.npmjs.org/d/-/d-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "es5-ext" "^0.10.50" + "type" "^1.0.1" + +"debug@^2.2.0": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"debug@^2.3.3": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"debug@^4.0.1", "debug@^4.1.1", "debug@^4.3.2": + "integrity" "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" + "version" "4.3.2" + dependencies: + "ms" "2.1.2" + +"decamelize@^1.1.1": + "integrity" "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + "version" "1.2.0" + +"decode-uri-component@^0.2.0": + "integrity" "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "resolved" "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" + "version" "0.2.0" + +"deep-is@^0.1.3": + "integrity" "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" + "version" "0.1.3" -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== +"deepmerge@^4.2.2": + "integrity" "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" + "version" "4.2.2" -default-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-compare/-/default-compare-1.0.0.tgz#cb61131844ad84d84788fb68fd01681ca7781a2f" - integrity sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ== +"default-compare@^1.0.0": + "integrity" "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==" + "resolved" "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz" + "version" "1.0.0" dependencies: - kind-of "^5.0.2" + "kind-of" "^5.0.2" -default-resolution@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684" - integrity sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ= +"default-resolution@^2.0.0": + "integrity" "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=" + "resolved" "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz" + "version" "2.0.0" -define-properties@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== +"define-properties@^1.1.2": + "integrity" "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" + "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" + "version" "1.1.3" dependencies: - object-keys "^1.0.12" + "object-keys" "^1.0.12" -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= +"define-property@^0.2.5": + "integrity" "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=" + "resolved" "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" + "version" "0.2.5" dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" + "is-descriptor" "^0.1.0" + +"define-property@^1.0.0": + "integrity" "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=" + "resolved" "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "is-descriptor" "^1.0.0" -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" +"define-property@^2.0.2": + "integrity" "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==" + "resolved" "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "is-descriptor" "^1.0.2" + "isobject" "^3.0.1" -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= +"detect-file@^1.0.0": + "integrity" "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" + "resolved" "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz" + "version" "1.0.0" -detect-indent@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== +"detect-indent@^6.0.0": + "integrity" "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==" + "resolved" "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" + "version" "6.1.0" -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== +"dir-glob@^3.0.1": + "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" + "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + "version" "3.0.1" dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -each-props@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.2.tgz#ea45a414d16dd5cfa419b1a81720d5ca06892333" - integrity sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA== - dependencies: - is-plain-object "^2.0.1" - object.defaults "^1.1.0" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -error-ex@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50: - version "0.10.53" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" - integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.3" - next-tick "~1.0.0" - -es6-iterator@^2.0.1, es6-iterator@^2.0.3, es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-promise@^3.1.2: - version "3.3.1" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" - integrity sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM= - -es6-symbol@^3.1.1, es6-symbol@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -es6-weak-map@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" - integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== - dependencies: - d "1" - es5-ext "^0.10.46" - es6-iterator "^2.0.3" - es6-symbol "^3.1.1" - -escape-string-regexp@^1.0.3, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-6.0.0.tgz#9cf45b13c5ac8f3d4c50f46a5121f61b3e318978" - integrity sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + "path-type" "^4.0.0" + +"doctrine@^3.0.0": + "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" + "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + "version" "3.0.0" dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" - integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + "esutils" "^2.0.2" + +"duplexify@^3.6.0": + "integrity" "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==" + "resolved" "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz" + "version" "3.7.1" + dependencies: + "end-of-stream" "^1.0.0" + "inherits" "^2.0.1" + "readable-stream" "^2.0.0" + "stream-shift" "^1.0.0" + +"each-props@^1.3.0": + "integrity" "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==" + "resolved" "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "is-plain-object" "^2.0.1" + "object.defaults" "^1.1.0" + +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" + +"end-of-stream@^1.0.0", "end-of-stream@^1.1.0": + "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==" + "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + "version" "1.4.4" + dependencies: + "once" "^1.4.0" -eslint-visitor-keys@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz#e32e99c6cdc2eb063f204eda5db67bfe58bb4186" - integrity sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q== - -eslint@7.x: - version "7.20.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.20.0.tgz#db07c4ca4eda2e2316e7aa57ac7fc91ec550bdc7" - integrity sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw== +"enquirer@^2.3.5": + "integrity" "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==" + "resolved" "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" + "version" "2.3.6" dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.3.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - file-entry-cache "^6.0.0" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash "^4.17.20" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.4" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -eslint@8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.2.0.tgz#44d3fb506d0f866a506d97a0fc0e90ee6d06a815" - integrity sha512-erw7XmM+CLxTOickrimJ1SiF55jiNlVSp2qqm0NuBWPtHYQCegD5ZMaW0c3i5ytPqL+SSLaCxdvQXFPLJn+ABw== + "ansi-colors" "^4.1.1" + +"error-ex@^1.2.0": + "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" + "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "is-arrayish" "^0.2.1" + +"es5-ext@^0.10.35", "es5-ext@^0.10.46", "es5-ext@^0.10.50": + "integrity" "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==" + "resolved" "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz" + "version" "0.10.53" + dependencies: + "es6-iterator" "~2.0.3" + "es6-symbol" "~3.1.3" + "next-tick" "~1.0.0" + +"es6-iterator@^2.0.1", "es6-iterator@^2.0.3", "es6-iterator@~2.0.3": + "integrity" "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=" + "resolved" "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" + "version" "2.0.3" + dependencies: + "d" "1" + "es5-ext" "^0.10.35" + "es6-symbol" "^3.1.1" + +"es6-symbol@^3.1.1", "es6-symbol@~3.1.3": + "integrity" "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==" + "resolved" "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" + "version" "3.1.3" + dependencies: + "d" "^1.0.1" + "ext" "^1.1.2" + +"es6-weak-map@^2.0.1": + "integrity" "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==" + "resolved" "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz" + "version" "2.0.3" + dependencies: + "d" "1" + "es5-ext" "^0.10.46" + "es6-iterator" "^2.0.3" + "es6-symbol" "^3.1.1" + +"escape-string-regexp@^1.0.3", "escape-string-regexp@^1.0.5": + "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"escape-string-regexp@^4.0.0": + "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + "version" "4.0.0" + +"eslint-scope@^5.1.1": + "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "esrecurse" "^4.3.0" + "estraverse" "^4.1.1" + +"eslint-scope@^6.0.0": + "integrity" "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "esrecurse" "^4.3.0" + "estraverse" "^5.2.0" + +"eslint-utils@^2.1.0": + "integrity" "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==" + "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "eslint-visitor-keys" "^1.1.0" + +"eslint-utils@^3.0.0": + "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==" + "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "eslint-visitor-keys" "^2.0.0" + +"eslint-visitor-keys@^1.1.0": + "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" + "version" "1.3.0" + +"eslint-visitor-keys@^1.3.0": + "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" + "version" "1.3.0" + +"eslint-visitor-keys@^2.0.0": + "integrity" "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" + "version" "2.0.0" + +"eslint-visitor-keys@^3.0.0", "eslint-visitor-keys@^3.1.0": + "integrity" "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz" + "version" "3.1.0" + +"eslint@*", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@>=5", "eslint@8.2.0": + "integrity" "sha512-erw7XmM+CLxTOickrimJ1SiF55jiNlVSp2qqm0NuBWPtHYQCegD5ZMaW0c3i5ytPqL+SSLaCxdvQXFPLJn+ABw==" + "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.2.0.tgz" + "version" "8.2.0" dependencies: "@eslint/eslintrc" "^1.0.4" "@humanwhocodes/config-array" "^0.6.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - enquirer "^2.3.5" - escape-string-regexp "^4.0.0" - eslint-scope "^6.0.0" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.0.0" - espree "^9.0.0" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^6.0.1" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.2.0" - semver "^7.2.1" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -espree@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.0.0.tgz#e90a2965698228502e771c7a58489b1a9d107090" - integrity sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ== - dependencies: - acorn "^8.5.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^3.0.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -estree-walker@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= - dependencies: - homedir-polyfill "^1.0.1" - -ext@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" - integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== - dependencies: - type "^2.0.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -fancy-log@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" - integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== - dependencies: - ansi-gray "^0.1.1" - color-support "^1.1.3" - parse-node-version "^1.0.0" - time-stamp "^1.0.0" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.1.1: - version "3.2.5" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" - integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== + "ajv" "^6.10.0" + "chalk" "^4.0.0" + "cross-spawn" "^7.0.2" + "debug" "^4.3.2" + "doctrine" "^3.0.0" + "enquirer" "^2.3.5" + "escape-string-regexp" "^4.0.0" + "eslint-scope" "^6.0.0" + "eslint-utils" "^3.0.0" + "eslint-visitor-keys" "^3.0.0" + "espree" "^9.0.0" + "esquery" "^1.4.0" + "esutils" "^2.0.2" + "fast-deep-equal" "^3.1.3" + "file-entry-cache" "^6.0.1" + "functional-red-black-tree" "^1.0.1" + "glob-parent" "^6.0.1" + "globals" "^13.6.0" + "ignore" "^4.0.6" + "import-fresh" "^3.0.0" + "imurmurhash" "^0.1.4" + "is-glob" "^4.0.0" + "js-yaml" "^4.1.0" + "json-stable-stringify-without-jsonify" "^1.0.1" + "levn" "^0.4.1" + "lodash.merge" "^4.6.2" + "minimatch" "^3.0.4" + "natural-compare" "^1.4.0" + "optionator" "^0.9.1" + "progress" "^2.0.0" + "regexpp" "^3.2.0" + "semver" "^7.2.1" + "strip-ansi" "^6.0.1" + "strip-json-comments" "^3.1.0" + "text-table" "^0.2.0" + "v8-compile-cache" "^2.0.3" + +"eslint@7.x": + "integrity" "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==" + "resolved" "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz" + "version" "7.20.0" + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.3.0" + "ajv" "^6.10.0" + "chalk" "^4.0.0" + "cross-spawn" "^7.0.2" + "debug" "^4.0.1" + "doctrine" "^3.0.0" + "enquirer" "^2.3.5" + "eslint-scope" "^5.1.1" + "eslint-utils" "^2.1.0" + "eslint-visitor-keys" "^2.0.0" + "espree" "^7.3.1" + "esquery" "^1.4.0" + "esutils" "^2.0.2" + "file-entry-cache" "^6.0.0" + "functional-red-black-tree" "^1.0.1" + "glob-parent" "^5.0.0" + "globals" "^12.1.0" + "ignore" "^4.0.6" + "import-fresh" "^3.0.0" + "imurmurhash" "^0.1.4" + "is-glob" "^4.0.0" + "js-yaml" "^3.13.1" + "json-stable-stringify-without-jsonify" "^1.0.1" + "levn" "^0.4.1" + "lodash" "^4.17.20" + "minimatch" "^3.0.4" + "natural-compare" "^1.4.0" + "optionator" "^0.9.1" + "progress" "^2.0.0" + "regexpp" "^3.1.0" + "semver" "^7.2.1" + "strip-ansi" "^6.0.0" + "strip-json-comments" "^3.1.0" + "table" "^6.0.4" + "text-table" "^0.2.0" + "v8-compile-cache" "^2.0.3" + +"espree@^7.3.0", "espree@^7.3.1": + "integrity" "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==" + "resolved" "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz" + "version" "7.3.1" + dependencies: + "acorn" "^7.4.0" + "acorn-jsx" "^5.3.1" + "eslint-visitor-keys" "^1.3.0" + +"espree@^9.0.0": + "integrity" "sha512-ZgYLvCS1wxOczBYGcQT9DDWgicXwJ4dbocr9uYN+/eresBAUuBu+O4WzB21ufQ/JqQT8gyp7hJ3z8SHii32mTQ==" + "resolved" "https://registry.npmjs.org/espree/-/espree-9.1.0.tgz" + "version" "9.1.0" + dependencies: + "acorn" "^8.6.0" + "acorn-jsx" "^5.3.1" + "eslint-visitor-keys" "^3.1.0" + +"esprima@^4.0.0": + "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + "version" "4.0.1" + +"esquery@^1.4.0": + "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" + "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "estraverse" "^5.1.0" + +"esrecurse@^4.3.0": + "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" + "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "estraverse" "^5.2.0" + +"estraverse@^4.1.1": + "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + "version" "4.3.0" + +"estraverse@^5.1.0", "estraverse@^5.2.0": + "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" + "version" "5.2.0" + +"estree-walker@^0.6.1": + "integrity" "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + "resolved" "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz" + "version" "0.6.1" + +"estree-walker@^1.0.1": + "integrity" "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + "resolved" "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz" + "version" "1.0.1" + +"estree-walker@^2.0.1": + "integrity" "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + "resolved" "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" + "version" "2.0.2" + +"esutils@^2.0.2": + "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + "version" "2.0.3" + +"expand-brackets@^2.1.4": + "integrity" "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=" + "resolved" "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" + "version" "2.1.4" + dependencies: + "debug" "^2.3.3" + "define-property" "^0.2.5" + "extend-shallow" "^2.0.1" + "posix-character-classes" "^0.1.0" + "regex-not" "^1.0.0" + "snapdragon" "^0.8.1" + "to-regex" "^3.0.1" + +"expand-tilde@^2.0.0", "expand-tilde@^2.0.2": + "integrity" "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=" + "resolved" "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "homedir-polyfill" "^1.0.1" + +"ext@^1.1.2": + "integrity" "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==" + "resolved" "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "type" "^2.0.0" + +"extend-shallow@^2.0.1": + "integrity" "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=" + "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "is-extendable" "^0.1.0" + +"extend-shallow@^3.0.0": + "integrity" "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=" + "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "assign-symbols" "^1.0.0" + "is-extendable" "^1.0.1" + +"extend-shallow@^3.0.2": + "integrity" "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=" + "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "assign-symbols" "^1.0.0" + "is-extendable" "^1.0.1" + +"extend@^3.0.0": + "integrity" "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "resolved" "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + "version" "3.0.2" + +"extglob@^2.0.4": + "integrity" "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==" + "resolved" "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "array-unique" "^0.3.2" + "define-property" "^1.0.0" + "expand-brackets" "^2.1.4" + "extend-shallow" "^2.0.1" + "fragment-cache" "^0.2.1" + "regex-not" "^1.0.0" + "snapdragon" "^0.8.1" + "to-regex" "^3.0.1" + +"fancy-log@^1.3.2": + "integrity" "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==" + "resolved" "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz" + "version" "1.3.3" + dependencies: + "ansi-gray" "^0.1.1" + "color-support" "^1.1.3" + "parse-node-version" "^1.0.0" + "time-stamp" "^1.0.0" + +"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": + "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + "version" "3.1.3" + +"fast-glob@^3.1.1": + "integrity" "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" + "version" "3.2.7" dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" - merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastq@^1.6.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" - integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== - dependencies: - reusify "^1.0.4" - -file-entry-cache@^6.0.0, file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -findup-sync@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" - integrity sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw= - dependencies: - detect-file "^1.0.0" - is-glob "^3.1.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - -findup-sync@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - -fined@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fined/-/fined-1.2.0.tgz#d00beccf1aa2b475d16d423b0238b713a2c4a37b" - integrity sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng== - dependencies: - expand-tilde "^2.0.2" - is-plain-object "^2.0.3" - object.defaults "^1.1.0" - object.pick "^1.2.0" - parse-filepath "^1.0.1" - -flagged-respawn@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" - integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" - integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== - -flush-write-stream@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -for-own@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" - integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= - dependencies: - for-in "^1.0.1" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fs-mkdirp-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" - integrity sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= - dependencies: - graceful-fs "^4.1.11" - through2 "^2.0.3" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.0.0, glob-parent@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-stream@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" - integrity sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= - dependencies: - extend "^3.0.0" - glob "^7.1.1" - glob-parent "^3.1.0" - is-negated-glob "^1.0.0" - ordered-read-streams "^1.0.0" - pumpify "^1.3.5" - readable-stream "^2.1.5" - remove-trailing-separator "^1.0.1" - to-absolute-glob "^2.0.0" - unique-stream "^2.0.2" - -glob-watcher@^5.0.3: - version "5.0.5" - resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-5.0.5.tgz#aa6bce648332924d9a8489be41e3e5c52d4186dc" - integrity sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw== - dependencies: - anymatch "^2.0.0" - async-done "^1.2.0" - chokidar "^2.0.0" - is-negated-glob "^1.0.0" - just-debounce "^1.0.0" - normalize-path "^3.0.0" - object.defaults "^1.1.0" - -glob@^7.1.1, glob@^7.1.3: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.6: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" - -globals@^13.6.0: - version "13.8.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.8.0.tgz#3e20f504810ce87a8d72e55aecf8435b50f4c1b3" - integrity sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q== - dependencies: - type-fest "^0.20.2" - -globals@^13.9.0: - version "13.10.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.10.0.tgz#60ba56c3ac2ca845cfbf4faeca727ad9dd204676" - integrity sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g== - dependencies: - type-fest "^0.20.2" - -globby@^11.0.4: - version "11.0.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" - integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - -glogg@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f" - integrity sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA== - dependencies: - sparkles "^1.0.0" - -graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -graceful-fs@^4.1.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" - integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== - -gulp-cli@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-2.3.0.tgz#ec0d380e29e52aa45e47977f0d32e18fd161122f" - integrity sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A== - dependencies: - ansi-colors "^1.0.1" - archy "^1.0.0" - array-sort "^1.0.0" - color-support "^1.1.3" - concat-stream "^1.6.0" - copy-props "^2.0.1" - fancy-log "^1.3.2" - gulplog "^1.0.0" - interpret "^1.4.0" - isobject "^3.0.1" - liftoff "^3.1.0" - matchdep "^2.0.0" - mute-stdout "^1.0.0" - pretty-hrtime "^1.0.0" - replace-homedir "^1.0.0" - semver-greatest-satisfied-range "^1.1.0" - v8flags "^3.2.0" - yargs "^7.1.0" - -gulp-concat@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/gulp-concat/-/gulp-concat-2.6.1.tgz#633d16c95d88504628ad02665663cee5a4793353" - integrity sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M= - dependencies: - concat-with-sourcemaps "^1.0.0" - through2 "^2.0.0" - vinyl "^2.0.0" - -gulp-replace@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/gulp-replace/-/gulp-replace-1.1.3.tgz#8641cdca78e683e8573ca4a012e7e4ebb7e4db60" - integrity sha512-HcPHpWY4XdF8zxYkDODHnG2+7a3nD/Y8Mfu3aBgMiCFDW3X2GiOKXllsAmILcxe3KZT2BXoN18WrpEFm48KfLQ== + "glob-parent" "^5.1.2" + "merge2" "^1.3.0" + "micromatch" "^4.0.4" + +"fast-json-stable-stringify@^2.0.0": + "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + "version" "2.1.0" + +"fast-levenshtein@^2.0.6": + "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + "version" "2.0.6" + +"fastq@^1.6.0": + "integrity" "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==" + "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" + "version" "1.13.0" + dependencies: + "reusify" "^1.0.4" + +"file-entry-cache@^6.0.0", "file-entry-cache@^6.0.1": + "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" + "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "flat-cache" "^3.0.4" + +"fill-range@^4.0.0": + "integrity" "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "extend-shallow" "^2.0.1" + "is-number" "^3.0.0" + "repeat-string" "^1.6.1" + "to-regex-range" "^2.1.0" + +"fill-range@^7.0.1": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "to-regex-range" "^5.0.1" + +"find-up@^1.0.0": + "integrity" "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "path-exists" "^2.0.0" + "pinkie-promise" "^2.0.0" + +"findup-sync@^2.0.0": + "integrity" "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=" + "resolved" "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "detect-file" "^1.0.0" + "is-glob" "^3.1.0" + "micromatch" "^3.0.4" + "resolve-dir" "^1.0.1" + +"findup-sync@^3.0.0": + "integrity" "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==" + "resolved" "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "detect-file" "^1.0.0" + "is-glob" "^4.0.0" + "micromatch" "^3.0.4" + "resolve-dir" "^1.0.1" + +"fined@^1.0.1": + "integrity" "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==" + "resolved" "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "expand-tilde" "^2.0.2" + "is-plain-object" "^2.0.3" + "object.defaults" "^1.1.0" + "object.pick" "^1.2.0" + "parse-filepath" "^1.0.1" + +"flagged-respawn@^1.0.0": + "integrity" "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==" + "resolved" "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz" + "version" "1.0.1" + +"flat-cache@^3.0.4": + "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" + "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "flatted" "^3.1.0" + "rimraf" "^3.0.2" + +"flatted@^3.1.0": + "integrity" "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==" + "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" + "version" "3.1.1" + +"flush-write-stream@^1.0.2": + "integrity" "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==" + "resolved" "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "inherits" "^2.0.3" + "readable-stream" "^2.3.6" + +"for-in@^1.0.1", "for-in@^1.0.2": + "integrity" "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "resolved" "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" + "version" "1.0.2" + +"for-own@^1.0.0": + "integrity" "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=" + "resolved" "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "for-in" "^1.0.1" + +"fragment-cache@^0.2.1": + "integrity" "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=" + "resolved" "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" + "version" "0.2.1" + dependencies: + "map-cache" "^0.2.2" + +"fs-mkdirp-stream@^1.0.0": + "integrity" "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=" + "resolved" "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "graceful-fs" "^4.1.11" + "through2" "^2.0.3" + +"fs.realpath@^1.0.0": + "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" + +"function-bind@^1.1.1": + "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + "version" "1.1.1" + +"functional-red-black-tree@^1.0.1": + "integrity" "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + "version" "1.0.1" + +"get-caller-file@^1.0.1": + "integrity" "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz" + "version" "1.0.3" + +"get-value@^2.0.3", "get-value@^2.0.6": + "integrity" "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "resolved" "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" + "version" "2.0.6" + +"glob-parent@^3.1.0": + "integrity" "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "is-glob" "^3.1.0" + "path-dirname" "^1.0.0" + +"glob-parent@^5.0.0": + "integrity" "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "is-glob" "^4.0.1" + +"glob-parent@^5.1.2": + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "is-glob" "^4.0.1" + +"glob-parent@^6.0.1": + "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "is-glob" "^4.0.3" + +"glob-stream@^6.1.0": + "integrity" "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=" + "resolved" "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "extend" "^3.0.0" + "glob" "^7.1.1" + "glob-parent" "^3.1.0" + "is-negated-glob" "^1.0.0" + "ordered-read-streams" "^1.0.0" + "pumpify" "^1.3.5" + "readable-stream" "^2.1.5" + "remove-trailing-separator" "^1.0.1" + "to-absolute-glob" "^2.0.0" + "unique-stream" "^2.0.2" + +"glob-watcher@^5.0.3": + "integrity" "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==" + "resolved" "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz" + "version" "5.0.5" + dependencies: + "anymatch" "^2.0.0" + "async-done" "^1.2.0" + "chokidar" "^2.0.0" + "is-negated-glob" "^1.0.0" + "just-debounce" "^1.0.0" + "normalize-path" "^3.0.0" + "object.defaults" "^1.1.0" + +"glob@^7.1.1", "glob@^7.1.3": + "integrity" "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + "version" "7.1.6" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^7.1.6": + "integrity" "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" + "version" "7.1.7" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"global-modules@^1.0.0": + "integrity" "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==" + "resolved" "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "global-prefix" "^1.0.1" + "is-windows" "^1.0.1" + "resolve-dir" "^1.0.0" + +"global-prefix@^1.0.1": + "integrity" "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=" + "resolved" "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "expand-tilde" "^2.0.2" + "homedir-polyfill" "^1.0.1" + "ini" "^1.3.4" + "is-windows" "^1.0.1" + "which" "^1.2.14" + +"globals@^12.1.0": + "integrity" "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==" + "resolved" "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz" + "version" "12.4.0" + dependencies: + "type-fest" "^0.8.1" + +"globals@^13.6.0": + "integrity" "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==" + "resolved" "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz" + "version" "13.12.0" + dependencies: + "type-fest" "^0.20.2" + +"globals@^13.9.0": + "integrity" "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==" + "resolved" "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz" + "version" "13.12.0" + dependencies: + "type-fest" "^0.20.2" + +"globby@^11.0.4": + "integrity" "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==" + "resolved" "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz" + "version" "11.0.4" + dependencies: + "array-union" "^2.1.0" + "dir-glob" "^3.0.1" + "fast-glob" "^3.1.1" + "ignore" "^5.1.4" + "merge2" "^1.3.0" + "slash" "^3.0.0" + +"glogg@^1.0.0": + "integrity" "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==" + "resolved" "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "sparkles" "^1.0.0" + +"graceful-fs@^4.0.0", "graceful-fs@^4.1.11", "graceful-fs@^4.1.2", "graceful-fs@^4.1.6": + "integrity" "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz" + "version" "4.2.4" + +"gulp-cli@^2.2.0": + "integrity" "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==" + "resolved" "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "ansi-colors" "^1.0.1" + "archy" "^1.0.0" + "array-sort" "^1.0.0" + "color-support" "^1.1.3" + "concat-stream" "^1.6.0" + "copy-props" "^2.0.1" + "fancy-log" "^1.3.2" + "gulplog" "^1.0.0" + "interpret" "^1.4.0" + "isobject" "^3.0.1" + "liftoff" "^3.1.0" + "matchdep" "^2.0.0" + "mute-stdout" "^1.0.0" + "pretty-hrtime" "^1.0.0" + "replace-homedir" "^1.0.0" + "semver-greatest-satisfied-range" "^1.1.0" + "v8flags" "^3.2.0" + "yargs" "^7.1.0" + +"gulp-concat@2.6.1": + "integrity" "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=" + "resolved" "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz" + "version" "2.6.1" + dependencies: + "concat-with-sourcemaps" "^1.0.0" + "through2" "^2.0.0" + "vinyl" "^2.0.0" + +"gulp-replace@1.1.3": + "integrity" "sha512-HcPHpWY4XdF8zxYkDODHnG2+7a3nD/Y8Mfu3aBgMiCFDW3X2GiOKXllsAmILcxe3KZT2BXoN18WrpEFm48KfLQ==" + "resolved" "https://registry.npmjs.org/gulp-replace/-/gulp-replace-1.1.3.tgz" + "version" "1.1.3" dependencies: "@types/node" "^14.14.41" "@types/vinyl" "^2.0.4" - istextorbinary "^3.0.0" - replacestream "^4.0.3" - yargs-parser ">=5.0.0-security.0" - -gulp@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/gulp/-/gulp-4.0.2.tgz#543651070fd0f6ab0a0650c6a3e6ff5a7cb09caa" - integrity sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA== - dependencies: - glob-watcher "^5.0.3" - gulp-cli "^2.2.0" - undertaker "^1.2.1" - vinyl-fs "^3.0.0" - -gulplog@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" - integrity sha1-4oxNRdBey77YGDY86PnFkmIp/+U= - dependencies: - glogg "^1.0.0" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - -hosted-git-info@^2.1.4: - version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -ignore@^5.1.8: - version "5.1.9" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" - integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -interpret@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= - -is-absolute@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" - integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== - dependencies: - is-relative "^1.0.0" - is-windows "^1.0.1" - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" + "istextorbinary" "^3.0.0" + "replacestream" "^4.0.3" + "yargs-parser" ">=5.0.0-security.0" + +"gulp@4.0.2": + "integrity" "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==" + "resolved" "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "glob-watcher" "^5.0.3" + "gulp-cli" "^2.2.0" + "undertaker" "^1.2.1" + "vinyl-fs" "^3.0.0" + +"gulplog@^1.0.0": + "integrity" "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=" + "resolved" "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "glogg" "^1.0.0" + +"has-flag@^3.0.0": + "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + "version" "3.0.0" + +"has-flag@^4.0.0": + "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + "version" "4.0.0" + +"has-symbols@^1.0.0": + "integrity" "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz" + "version" "1.0.1" + +"has-value@^0.3.1": + "integrity" "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=" + "resolved" "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" + "version" "0.3.1" + dependencies: + "get-value" "^2.0.3" + "has-values" "^0.1.4" + "isobject" "^2.0.0" + +"has-value@^1.0.0": + "integrity" "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=" + "resolved" "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "get-value" "^2.0.6" + "has-values" "^1.0.0" + "isobject" "^3.0.0" + +"has-values@^0.1.4": + "integrity" "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + "resolved" "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" + "version" "0.1.4" + +"has-values@^1.0.0": + "integrity" "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=" + "resolved" "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "is-number" "^3.0.0" + "kind-of" "^4.0.0" + +"has@^1.0.3": + "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" + "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "function-bind" "^1.1.1" + +"homedir-polyfill@^1.0.1": + "integrity" "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==" + "resolved" "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "parse-passwd" "^1.0.0" + +"hosted-git-info@^2.1.4": + "integrity" "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz" + "version" "2.8.8" + +"ignore@^4.0.6": + "integrity" "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" + "version" "4.0.6" + +"ignore@^5.1.4": + "integrity" "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz" + "version" "5.1.9" + +"ignore@^5.1.8": + "integrity" "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz" + "version" "5.1.9" + +"import-fresh@^3.0.0", "import-fresh@^3.2.1": + "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" + "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "parent-module" "^1.0.0" + "resolve-from" "^4.0.0" + +"imurmurhash@^0.1.4": + "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + "version" "0.1.4" + +"inflight@^1.0.4": + "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "once" "^1.3.0" + "wrappy" "1" + +"inherits@^2.0.1", "inherits@^2.0.3", "inherits@~2.0.3", "inherits@2": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" + +"ini@^1.3.4": + "integrity" "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz" + "version" "1.3.5" + +"interpret@^1.4.0": + "integrity" "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + "resolved" "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" + "version" "1.4.0" + +"invert-kv@^1.0.0": + "integrity" "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + "resolved" "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz" + "version" "1.0.0" + +"is-absolute@^1.0.0": + "integrity" "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==" + "resolved" "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "is-relative" "^1.0.0" + "is-windows" "^1.0.1" + +"is-accessor-descriptor@^0.1.6": + "integrity" "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=" + "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz" + "version" "0.1.6" + dependencies: + "kind-of" "^3.0.2" + +"is-accessor-descriptor@^1.0.0": + "integrity" "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==" + "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "kind-of" "^6.0.0" -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-core-module@^2.2.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" - integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== +"is-arrayish@^0.2.1": + "integrity" "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + "version" "0.2.1" + +"is-binary-path@^1.0.0": + "integrity" "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=" + "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "binary-extensions" "^1.0.0" + +"is-buffer@^1.1.5": + "integrity" "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + "version" "1.1.6" + +"is-core-module@^2.2.0": + "integrity" "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==" + "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "has" "^1.0.3" + +"is-data-descriptor@^0.1.4": + "integrity" "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=" + "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz" + "version" "0.1.4" + dependencies: + "kind-of" "^3.0.2" + +"is-data-descriptor@^1.0.0": + "integrity" "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==" + "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "kind-of" "^6.0.0" + +"is-descriptor@^0.1.0": + "integrity" "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==" + "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" + "version" "0.1.6" + dependencies: + "is-accessor-descriptor" "^0.1.6" + "is-data-descriptor" "^0.1.4" + "kind-of" "^5.0.0" + +"is-descriptor@^1.0.0", "is-descriptor@^1.0.2": + "integrity" "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==" + "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" + "version" "1.0.2" dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" + "is-accessor-descriptor" "^1.0.0" + "is-data-descriptor" "^1.0.0" + "kind-of" "^6.0.2" -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= +"is-extendable@^0.1.0", "is-extendable@^0.1.1": + "integrity" "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + "version" "0.1.1" -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== +"is-extendable@^1.0.1": + "integrity" "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==" + "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" + "version" "1.0.1" dependencies: - is-plain-object "^2.0.4" + "is-plain-object" "^2.0.4" -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +"is-extglob@^2.1.0", "is-extglob@^2.1.1": + "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= +"is-fullwidth-code-point@^1.0.0": + "integrity" "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" + "version" "1.0.0" dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + "number-is-nan" "^1.0.0" -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" -is-glob@^4.0.0, is-glob@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== +"is-glob@^3.1.0": + "integrity" "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz" + "version" "3.1.0" dependencies: - is-extglob "^2.1.1" + "is-extglob" "^2.1.0" -is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== +"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@^4.0.3": + "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + "version" "4.0.3" dependencies: - is-extglob "^2.1.1" + "is-extglob" "^2.1.1" -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= +"is-module@^1.0.0": + "integrity" "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=" + "resolved" "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz" + "version" "1.0.0" -is-negated-glob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" - integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= +"is-negated-glob@^1.0.0": + "integrity" "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=" + "resolved" "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz" + "version" "1.0.0" -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= +"is-number@^3.0.0": + "integrity" "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" + "version" "3.0.0" dependencies: - kind-of "^3.0.2" + "kind-of" "^3.0.2" -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== +"is-number@^4.0.0": + "integrity" "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz" + "version" "4.0.0" -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== +"is-plain-object@^2.0.1", "is-plain-object@^2.0.3", "is-plain-object@^2.0.4": + "integrity" "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==" + "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + "version" "2.0.4" dependencies: - isobject "^3.0.1" + "isobject" "^3.0.1" -is-reference@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" - integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== +"is-reference@^1.2.1": + "integrity" "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==" + "resolved" "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz" + "version" "1.2.1" dependencies: "@types/estree" "*" -is-relative@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" - integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== - dependencies: - is-unc-path "^1.0.0" - -is-unc-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" - integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== - dependencies: - unc-path-regex "^0.1.2" - -is-utf8@^0.2.0, is-utf8@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - -is-valid-glob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" - integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= - -is-windows@^1.0.1, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" +"is-relative@^1.0.0": + "integrity" "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==" + "resolved" "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "is-unc-path" "^1.0.0" + +"is-unc-path@^1.0.0": + "integrity" "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==" + "resolved" "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "unc-path-regex" "^0.1.2" -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -istextorbinary@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-3.3.0.tgz#06b1c57d948da11461bd237c00ce09e9902964f2" - integrity sha512-Tvq1W6NAcZeJ8op+Hq7tdZ434rqnMx4CCZ7H0ff83uEloDvVbqAwaMTZcafKGJT0VHkYzuXUiCY4hlXQg6WfoQ== - dependencies: - binaryextensions "^2.2.0" - textextensions "^3.2.0" - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -just-debounce@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.0.0.tgz#87fccfaeffc0b68cd19d55f6722943f929ea35ea" - integrity sha1-h/zPrv/AtozRnVX2cilD+SnqNeo= - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0, kind-of@^5.0.2: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -last-run@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/last-run/-/last-run-1.1.1.tgz#45b96942c17b1c79c772198259ba943bebf8ca5b" - integrity sha1-RblpQsF7HHnHchmCWbqUO+v4yls= - dependencies: - default-resolution "^2.0.0" - es6-weak-map "^2.0.1" - -lazystream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" - integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= - dependencies: - readable-stream "^2.0.5" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= - dependencies: - invert-kv "^1.0.0" - -lead@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" - integrity sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI= - dependencies: - flush-write-stream "^1.0.2" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -liftoff@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" - integrity sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog== - dependencies: - extend "^3.0.0" - findup-sync "^3.0.0" - fined "^1.0.1" - flagged-respawn "^1.0.0" - is-plain-object "^2.0.4" - object.map "^1.0.0" - rechoir "^0.6.2" - resolve "^1.1.7" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash@^4.17.20: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -magic-string@^0.25.7: - version "0.25.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== - dependencies: - sourcemap-codec "^1.4.4" - -make-iterator@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" - integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw== - dependencies: - kind-of "^6.0.2" - -map-cache@^0.2.0, map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -matchdep@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/matchdep/-/matchdep-2.0.0.tgz#c6f34834a0d8dbc3b37c27ee8bbcb27c7775582e" - integrity sha1-xvNINKDY28OzfCfui7yyfHd1WC4= - dependencies: - findup-sync "^2.0.0" - micromatch "^3.0.4" - resolve "^1.4.0" - stack-trace "0.0.10" - -merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== - dependencies: - braces "^3.0.1" - picomatch "^2.0.5" - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@^0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -mute-stdout@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mute-stdout/-/mute-stdout-1.0.1.tgz#acb0300eb4de23a7ddeec014e3e96044b3472331" - integrity sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg== - -nan@^2.12.1: - version "2.14.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" - integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -next-tick@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= - -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -now-and-later@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" - integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== - dependencies: - once "^1.3.2" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-keys@^1.0.11, object-keys@^1.0.12: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.0.4, object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.defaults@^1.0.0, object.defaults@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" - integrity sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8= - dependencies: - array-each "^1.0.1" - array-slice "^1.0.0" - for-own "^1.0.0" - isobject "^3.0.0" - -object.map@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" - integrity sha1-z4Plncj8wK1fQlDh94s7gb2AHTc= - dependencies: - for-own "^1.0.0" - make-iterator "^1.0.0" - -object.pick@^1.2.0, object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -object.reduce@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.reduce/-/object.reduce-1.0.1.tgz#6fe348f2ac7fa0f95ca621226599096825bb03ad" - integrity sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60= - dependencies: - for-own "^1.0.0" - make-iterator "^1.0.0" - -once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -ordered-read-streams@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" - integrity sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= - dependencies: - readable-stream "^2.0.1" - -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= - dependencies: - lcid "^1.0.0" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-filepath@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" - integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= - dependencies: - is-absolute "^1.0.0" - map-cache "^0.2.0" - path-root "^0.1.1" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -parse-node-version@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" - integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-root-regex@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" - integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= - -path-root@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" - integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= - dependencies: - path-root-regex "^0.1.0" - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picomatch@^2.0.5, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - -picomatch@^2.2.2: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -pretty-hrtime@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" - integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= - -process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.5: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -queue-microtask@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.2.tgz#abf64491e6ecf0f38a6502403d4cda04f372dfd3" - integrity sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg== - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= - dependencies: - resolve "^1.1.6" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexpp@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" - integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== - -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -remove-bom-buffer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" - integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== - dependencies: - is-buffer "^1.1.5" - is-utf8 "^0.2.1" - -remove-bom-stream@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" - integrity sha1-BfGlk/FuQuH7kOv1nejlaVJflSM= - dependencies: - remove-bom-buffer "^3.0.0" - safe-buffer "^5.1.0" - through2 "^2.0.3" - -remove-trailing-separator@^1.0.1, remove-trailing-separator@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -replace-ext@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" - integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== - -replace-homedir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/replace-homedir/-/replace-homedir-1.0.0.tgz#e87f6d513b928dde808260c12be7fec6ff6e798c" - integrity sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw= - dependencies: - homedir-polyfill "^1.0.1" - is-absolute "^1.0.0" - remove-trailing-separator "^1.1.0" - -replacestream@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/replacestream/-/replacestream-4.0.3.tgz#3ee5798092be364b1cdb1484308492cb3dff2f36" - integrity sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA== - dependencies: - escape-string-regexp "^1.0.3" - object-assign "^4.0.1" - readable-stream "^2.0.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - -require-relative@^0.8.7: - version "0.8.7" - resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" - integrity sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4= - -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-options@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" - integrity sha1-MrueOcBtZzONyTeMDW1gdFZq0TE= - dependencies: - value-or-function "^3.0.0" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.4.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.17.0, resolve@^1.19.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^2.5.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rollup-plugin-svelte@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-svelte/-/rollup-plugin-svelte-7.1.0.tgz#d45f2b92b1014be4eb46b55aa033fb9a9c65f04d" - integrity sha512-vopCUq3G+25sKjwF5VilIbiY6KCuMNHP1PFvx2Vr3REBNMDllKHFZN2B9jwwC+MqNc3UPKkjXnceLPEjTjXGXg== - dependencies: - require-relative "^0.8.7" - rollup-pluginutils "^2.8.2" - -rollup-pluginutils@^2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -rollup@2.59.0: - version "2.59.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.59.0.tgz#108c61b0fa0a37ebc8d1f164f281622056f0db59" - integrity sha512-l7s90JQhCQ6JyZjKgo7Lq1dKh2RxatOM+Jr6a9F7WbS9WgKbocyUSeLmZl8evAse7y96Ae98L2k1cBOwWD8nHw== +"is-utf8@^0.2.0", "is-utf8@^0.2.1": + "integrity" "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + "resolved" "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + "version" "0.2.1" + +"is-valid-glob@^1.0.0": + "integrity" "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=" + "resolved" "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz" + "version" "1.0.0" + +"is-windows@^1.0.1", "is-windows@^1.0.2": + "integrity" "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + "resolved" "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" + "version" "1.0.2" + +"isarray@~1.0.0", "isarray@1.0.0": + "integrity" "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "version" "1.0.0" + +"isexe@^2.0.0": + "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + "version" "2.0.0" + +"isobject@^2.0.0": + "integrity" "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=" + "resolved" "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "isarray" "1.0.0" + +"isobject@^3.0.0", "isobject@^3.0.1": + "integrity" "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "resolved" "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + "version" "3.0.1" + +"istextorbinary@^3.0.0": + "integrity" "sha512-Tvq1W6NAcZeJ8op+Hq7tdZ434rqnMx4CCZ7H0ff83uEloDvVbqAwaMTZcafKGJT0VHkYzuXUiCY4hlXQg6WfoQ==" + "resolved" "https://registry.npmjs.org/istextorbinary/-/istextorbinary-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "binaryextensions" "^2.2.0" + "textextensions" "^3.2.0" + +"js-tokens@^4.0.0": + "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + "version" "4.0.0" + +"js-yaml@^3.13.1": + "integrity" "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz" + "version" "3.14.0" + dependencies: + "argparse" "^1.0.7" + "esprima" "^4.0.0" + +"js-yaml@^4.1.0": + "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "argparse" "^2.0.1" + +"json-schema-traverse@^0.4.1": + "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + "version" "0.4.1" + +"json-schema-traverse@^1.0.0": + "integrity" "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + "version" "1.0.0" + +"json-stable-stringify-without-jsonify@^1.0.1": + "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + "version" "1.0.1" + +"just-debounce@^1.0.0": + "integrity" "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=" + "resolved" "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz" + "version" "1.0.0" + +"kind-of@^3.0.2", "kind-of@^3.0.3", "kind-of@^3.2.0": + "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + "version" "3.2.2" + dependencies: + "is-buffer" "^1.1.5" + +"kind-of@^4.0.0": + "integrity" "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "is-buffer" "^1.1.5" + +"kind-of@^5.0.0": + "integrity" "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" + "version" "5.1.0" + +"kind-of@^5.0.2": + "integrity" "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" + "version" "5.1.0" + +"kind-of@^6.0.0": + "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + "version" "6.0.3" + +"kind-of@^6.0.2": + "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + "version" "6.0.3" + +"last-run@^1.1.0": + "integrity" "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=" + "resolved" "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "default-resolution" "^2.0.0" + "es6-weak-map" "^2.0.1" + +"lazystream@^1.0.0": + "integrity" "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=" + "resolved" "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "readable-stream" "^2.0.5" + +"lcid@^1.0.0": + "integrity" "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=" + "resolved" "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "invert-kv" "^1.0.0" + +"lead@^1.0.0": + "integrity" "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=" + "resolved" "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "flush-write-stream" "^1.0.2" + +"levn@^0.4.1": + "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" + "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + "version" "0.4.1" + dependencies: + "prelude-ls" "^1.2.1" + "type-check" "~0.4.0" + +"liftoff@^3.1.0": + "integrity" "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==" + "resolved" "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "extend" "^3.0.0" + "findup-sync" "^3.0.0" + "fined" "^1.0.1" + "flagged-respawn" "^1.0.0" + "is-plain-object" "^2.0.4" + "object.map" "^1.0.0" + "rechoir" "^0.6.2" + "resolve" "^1.1.7" + +"load-json-file@^1.0.0": + "integrity" "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=" + "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "graceful-fs" "^4.1.2" + "parse-json" "^2.2.0" + "pify" "^2.0.0" + "pinkie-promise" "^2.0.0" + "strip-bom" "^2.0.0" + +"lodash.merge@^4.6.2": + "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + "version" "4.6.2" + +"lodash@^4.17.20": + "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + "version" "4.17.21" + +"lru-cache@^6.0.0": + "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "yallist" "^4.0.0" + +"magic-string@^0.25.7": + "integrity" "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==" + "resolved" "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz" + "version" "0.25.7" + dependencies: + "sourcemap-codec" "^1.4.4" + +"make-iterator@^1.0.0": + "integrity" "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==" + "resolved" "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "kind-of" "^6.0.2" + +"map-cache@^0.2.0", "map-cache@^0.2.2": + "integrity" "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + "resolved" "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" + "version" "0.2.2" + +"map-visit@^1.0.0": + "integrity" "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=" + "resolved" "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "object-visit" "^1.0.0" + +"matchdep@^2.0.0": + "integrity" "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=" + "resolved" "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "findup-sync" "^2.0.0" + "micromatch" "^3.0.4" + "resolve" "^1.4.0" + "stack-trace" "0.0.10" + +"merge2@^1.3.0": + "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + "version" "1.4.1" + +"micromatch@^3.0.4", "micromatch@^3.1.10", "micromatch@^3.1.4": + "integrity" "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" + "version" "3.1.10" + dependencies: + "arr-diff" "^4.0.0" + "array-unique" "^0.3.2" + "braces" "^2.3.1" + "define-property" "^2.0.2" + "extend-shallow" "^3.0.2" + "extglob" "^2.0.4" + "fragment-cache" "^0.2.1" + "kind-of" "^6.0.2" + "nanomatch" "^1.2.9" + "object.pick" "^1.3.0" + "regex-not" "^1.0.0" + "snapdragon" "^0.8.1" + "to-regex" "^3.0.2" + +"micromatch@^4.0.4": + "integrity" "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" + "version" "4.0.4" + dependencies: + "braces" "^3.0.1" + "picomatch" "^2.2.3" + +"min-indent@^1.0.0": + "integrity" "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" + "resolved" "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" + "version" "1.0.1" + +"minimatch@^3.0.4": + "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "brace-expansion" "^1.1.7" + +"mixin-deep@^1.2.0": + "integrity" "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==" + "resolved" "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "for-in" "^1.0.2" + "is-extendable" "^1.0.1" + +"ms@2.0.0": + "integrity" "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + "version" "2.0.0" + +"ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + +"mute-stdout@^1.0.0": + "integrity" "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==" + "resolved" "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz" + "version" "1.0.1" + +"nanomatch@^1.2.9": + "integrity" "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==" + "resolved" "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" + "version" "1.2.13" + dependencies: + "arr-diff" "^4.0.0" + "array-unique" "^0.3.2" + "define-property" "^2.0.2" + "extend-shallow" "^3.0.2" + "fragment-cache" "^0.2.1" + "is-windows" "^1.0.2" + "kind-of" "^6.0.2" + "object.pick" "^1.3.0" + "regex-not" "^1.0.0" + "snapdragon" "^0.8.1" + "to-regex" "^3.0.1" + +"natural-compare@^1.4.0": + "integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + "version" "1.4.0" + +"next-tick@~1.0.0": + "integrity" "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + "resolved" "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz" + "version" "1.0.0" + +"normalize-package-data@^2.3.2": + "integrity" "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==" + "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + "version" "2.5.0" + dependencies: + "hosted-git-info" "^2.1.4" + "resolve" "^1.10.0" + "semver" "2 || 3 || 4 || 5" + "validate-npm-package-license" "^3.0.1" + +"normalize-path@^2.1.1": + "integrity" "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "remove-trailing-separator" "^1.0.1" + +"normalize-path@^3.0.0": + "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + "version" "3.0.0" + +"now-and-later@^2.0.0": + "integrity" "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==" + "resolved" "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "once" "^1.3.2" + +"number-is-nan@^1.0.0": + "integrity" "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "resolved" "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + "version" "1.0.1" + +"object-assign@^4.0.1": + "integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + "version" "4.1.1" + +"object-copy@^0.1.0": + "integrity" "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=" + "resolved" "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" + "version" "0.1.0" + dependencies: + "copy-descriptor" "^0.1.0" + "define-property" "^0.2.5" + "kind-of" "^3.0.3" + +"object-keys@^1.0.11", "object-keys@^1.0.12": + "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + "version" "1.1.1" + +"object-visit@^1.0.0": + "integrity" "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=" + "resolved" "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "isobject" "^3.0.0" + +"object.assign@^4.0.4", "object.assign@^4.1.0": + "integrity" "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==" + "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "define-properties" "^1.1.2" + "function-bind" "^1.1.1" + "has-symbols" "^1.0.0" + "object-keys" "^1.0.11" + +"object.defaults@^1.0.0", "object.defaults@^1.1.0": + "integrity" "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=" + "resolved" "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "array-each" "^1.0.1" + "array-slice" "^1.0.0" + "for-own" "^1.0.0" + "isobject" "^3.0.0" + +"object.map@^1.0.0": + "integrity" "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=" + "resolved" "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "for-own" "^1.0.0" + "make-iterator" "^1.0.0" + +"object.pick@^1.2.0", "object.pick@^1.3.0": + "integrity" "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=" + "resolved" "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "isobject" "^3.0.1" + +"object.reduce@^1.0.0": + "integrity" "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=" + "resolved" "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "for-own" "^1.0.0" + "make-iterator" "^1.0.0" + +"once@^1.3.0", "once@^1.3.1", "once@^1.3.2", "once@^1.4.0": + "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "wrappy" "1" + +"optionator@^0.9.1": + "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" + "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + "version" "0.9.1" + dependencies: + "deep-is" "^0.1.3" + "fast-levenshtein" "^2.0.6" + "levn" "^0.4.1" + "prelude-ls" "^1.2.1" + "type-check" "^0.4.0" + "word-wrap" "^1.2.3" + +"ordered-read-streams@^1.0.0": + "integrity" "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=" + "resolved" "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "readable-stream" "^2.0.1" + +"os-locale@^1.4.0": + "integrity" "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=" + "resolved" "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "lcid" "^1.0.0" + +"parent-module@^1.0.0": + "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" + "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "callsites" "^3.0.0" + +"parse-filepath@^1.0.1": + "integrity" "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=" + "resolved" "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "is-absolute" "^1.0.0" + "map-cache" "^0.2.0" + "path-root" "^0.1.1" + +"parse-json@^2.2.0": + "integrity" "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=" + "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "error-ex" "^1.2.0" + +"parse-node-version@^1.0.0": + "integrity" "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==" + "resolved" "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz" + "version" "1.0.1" + +"parse-passwd@^1.0.0": + "integrity" "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + "resolved" "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" + "version" "1.0.0" + +"pascalcase@^0.1.1": + "integrity" "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + "resolved" "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" + "version" "0.1.1" + +"path-dirname@^1.0.0": + "integrity" "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + "resolved" "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz" + "version" "1.0.2" + +"path-exists@^2.0.0": + "integrity" "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "pinkie-promise" "^2.0.0" + +"path-is-absolute@^1.0.0": + "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" + +"path-key@^3.1.0": + "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + "version" "3.1.1" + +"path-parse@^1.0.6": + "integrity" "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz" + "version" "1.0.6" + +"path-root-regex@^0.1.0": + "integrity" "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=" + "resolved" "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz" + "version" "0.1.2" + +"path-root@^0.1.1": + "integrity" "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=" + "resolved" "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz" + "version" "0.1.1" + dependencies: + "path-root-regex" "^0.1.0" + +"path-type@^1.0.0": + "integrity" "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "graceful-fs" "^4.1.2" + "pify" "^2.0.0" + "pinkie-promise" "^2.0.0" + +"path-type@^4.0.0": + "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + "version" "4.0.0" + +"picomatch@^2.2.2", "picomatch@^2.2.3": + "integrity" "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" + "version" "2.3.0" + +"pify@^2.0.0": + "integrity" "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + "version" "2.3.0" + +"pinkie-promise@^2.0.0": + "integrity" "sha1-ITXW36ejWMBprJsXh3YogihFD/o=" + "resolved" "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "pinkie" "^2.0.0" + +"pinkie@^2.0.0": + "integrity" "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + "resolved" "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + "version" "2.0.4" + +"posix-character-classes@^0.1.0": + "integrity" "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + "resolved" "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" + "version" "0.1.1" + +"prelude-ls@^1.2.1": + "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + "version" "1.2.1" + +"pretty-hrtime@^1.0.0": + "integrity" "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" + "resolved" "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz" + "version" "1.0.3" + +"process-nextick-args@^2.0.0", "process-nextick-args@~2.0.0": + "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + "version" "2.0.1" + +"progress@^2.0.0": + "integrity" "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + "resolved" "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" + "version" "2.0.3" + +"pump@^2.0.0": + "integrity" "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==" + "resolved" "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "end-of-stream" "^1.1.0" + "once" "^1.3.1" + +"pumpify@^1.3.5": + "integrity" "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==" + "resolved" "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz" + "version" "1.5.1" + dependencies: + "duplexify" "^3.6.0" + "inherits" "^2.0.3" + "pump" "^2.0.0" + +"punycode@^2.1.0": + "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + "version" "2.1.1" + +"queue-microtask@^1.2.2": + "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + "version" "1.2.3" + +"read-pkg-up@^1.0.1": + "integrity" "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=" + "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "find-up" "^1.0.0" + "read-pkg" "^1.0.0" + +"read-pkg@^1.0.0": + "integrity" "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=" + "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "load-json-file" "^1.0.0" + "normalize-package-data" "^2.3.2" + "path-type" "^1.0.0" + +"readable-stream@^2.0.0", "readable-stream@^2.0.1", "readable-stream@^2.0.2", "readable-stream@^2.0.5", "readable-stream@^2.1.5", "readable-stream@^2.2.2", "readable-stream@^2.3.3", "readable-stream@^2.3.5", "readable-stream@^2.3.6", "readable-stream@~2.3.6": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readdirp@^2.2.1": + "integrity" "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz" + "version" "2.2.1" + dependencies: + "graceful-fs" "^4.1.11" + "micromatch" "^3.1.10" + "readable-stream" "^2.0.2" + +"rechoir@^0.6.2": + "integrity" "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=" + "resolved" "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" + "version" "0.6.2" + dependencies: + "resolve" "^1.1.6" + +"regex-not@^1.0.0", "regex-not@^1.0.2": + "integrity" "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==" + "resolved" "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "extend-shallow" "^3.0.2" + "safe-regex" "^1.1.0" + +"regexpp@^3.1.0", "regexpp@^3.2.0": + "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" + "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + "version" "3.2.0" + +"remove-bom-buffer@^3.0.0": + "integrity" "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==" + "resolved" "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "is-buffer" "^1.1.5" + "is-utf8" "^0.2.1" + +"remove-bom-stream@^1.2.0": + "integrity" "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=" + "resolved" "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "remove-bom-buffer" "^3.0.0" + "safe-buffer" "^5.1.0" + "through2" "^2.0.3" + +"remove-trailing-separator@^1.0.1", "remove-trailing-separator@^1.1.0": + "integrity" "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + "resolved" "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz" + "version" "1.1.0" + +"repeat-element@^1.1.2": + "integrity" "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + "resolved" "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz" + "version" "1.1.3" + +"repeat-string@^1.6.1": + "integrity" "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "resolved" "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + "version" "1.6.1" + +"replace-ext@^1.0.0": + "integrity" "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==" + "resolved" "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz" + "version" "1.0.1" + +"replace-homedir@^1.0.0": + "integrity" "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=" + "resolved" "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "homedir-polyfill" "^1.0.1" + "is-absolute" "^1.0.0" + "remove-trailing-separator" "^1.1.0" + +"replacestream@^4.0.3": + "integrity" "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==" + "resolved" "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "escape-string-regexp" "^1.0.3" + "object-assign" "^4.0.1" + "readable-stream" "^2.0.2" + +"require-directory@^2.1.1": + "integrity" "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + "version" "2.1.1" + +"require-from-string@^2.0.2": + "integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + "version" "2.0.2" + +"require-main-filename@^1.0.1": + "integrity" "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz" + "version" "1.0.1" + +"require-relative@^0.8.7": + "integrity" "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=" + "resolved" "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz" + "version" "0.8.7" + +"resolve-dir@^1.0.0", "resolve-dir@^1.0.1": + "integrity" "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=" + "resolved" "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "expand-tilde" "^2.0.0" + "global-modules" "^1.0.0" + +"resolve-from@^4.0.0": + "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + "version" "4.0.0" + +"resolve-options@^1.1.0": + "integrity" "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=" + "resolved" "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "value-or-function" "^3.0.0" + +"resolve-url@^0.2.1": + "integrity" "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + "resolved" "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" + "version" "0.2.1" + +"resolve@^1.1.6", "resolve@^1.1.7", "resolve@^1.10.0", "resolve@^1.4.0": + "integrity" "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz" + "version" "1.17.0" + dependencies: + "path-parse" "^1.0.6" + +"resolve@^1.17.0": + "integrity" "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" + "version" "1.20.0" + dependencies: + "is-core-module" "^2.2.0" + "path-parse" "^1.0.6" + +"resolve@^1.19.0": + "integrity" "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" + "version" "1.20.0" + dependencies: + "is-core-module" "^2.2.0" + "path-parse" "^1.0.6" + +"ret@~0.1.10": + "integrity" "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + "resolved" "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" + "version" "0.1.15" + +"reusify@^1.0.4": + "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + "version" "1.0.4" + +"rimraf@^3.0.2": + "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "glob" "^7.1.3" + +"rollup-plugin-svelte@^7.1.0": + "integrity" "sha512-vopCUq3G+25sKjwF5VilIbiY6KCuMNHP1PFvx2Vr3REBNMDllKHFZN2B9jwwC+MqNc3UPKkjXnceLPEjTjXGXg==" + "resolved" "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-7.1.0.tgz" + "version" "7.1.0" + dependencies: + "require-relative" "^0.8.7" + "rollup-pluginutils" "^2.8.2" + +"rollup-pluginutils@^2.8.2": + "integrity" "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==" + "resolved" "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz" + "version" "2.8.2" + dependencies: + "estree-walker" "^0.6.1" + +"rollup@^1.20.0||^2.0.0", "rollup@^2.14.0", "rollup@^2.38.3", "rollup@^2.42.0", "rollup@>=2.0.0", "rollup@2.59.0", "rollup@2.x": + "integrity" "sha512-l7s90JQhCQ6JyZjKgo7Lq1dKh2RxatOM+Jr6a9F7WbS9WgKbocyUSeLmZl8evAse7y96Ae98L2k1cBOwWD8nHw==" + "resolved" "https://registry.npmjs.org/rollup/-/rollup-2.59.0.tgz" + "version" "2.59.0" optionalDependencies: - fsevents "~2.3.2" + "fsevents" "~2.3.2" -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== +"run-parallel@^1.1.9": + "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" + "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + "version" "1.2.0" dependencies: - queue-microtask "^1.2.2" + "queue-microtask" "^1.2.2" -safe-buffer@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +"safe-buffer@^5.1.0": + "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + "version" "5.2.1" -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +"safe-buffer@~5.1.0", "safe-buffer@~5.1.1": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= +"safe-regex@^1.1.0": + "integrity" "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=" + "resolved" "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" + "version" "1.1.0" dependencies: - ret "~0.1.10" + "ret" "~0.1.10" -sander@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/sander/-/sander-0.5.1.tgz#741e245e231f07cafb6fdf0f133adfa216a502ad" - integrity sha1-dB4kXiMfB8r7b98PEzrfohalAq0= +"semver-greatest-satisfied-range@^1.1.0": + "integrity" "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=" + "resolved" "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz" + "version" "1.1.0" dependencies: - es6-promise "^3.1.2" - graceful-fs "^4.1.3" - mkdirp "^0.5.1" - rimraf "^2.5.2" + "sver-compat" "^1.5.0" -semver-greatest-satisfied-range@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz#13e8c2658ab9691cb0cd71093240280d36f77a5b" - integrity sha1-E+jCZYq5aRywzXEJMkAoDTb3els= +"semver@^7.2.1", "semver@^7.3.5": + "integrity" "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" + "version" "7.3.5" dependencies: - sver-compat "^1.5.0" + "lru-cache" "^6.0.0" "semver@2 || 3 || 4 || 5": - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^7.2.1: - version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sorcery@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/sorcery/-/sorcery-0.10.0.tgz#8ae90ad7d7cb05fc59f1ab0c637845d5c15a52b7" - integrity sha1-iukK19fLBfxZ8asMY3hF1cFaUrc= - dependencies: - buffer-crc32 "^0.2.5" - minimist "^1.2.0" - sander "^0.5.0" - sourcemap-codec "^1.3.0" - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -sourcemap-codec@^1.3.0, sourcemap-codec@^1.4.4: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -sparkles@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" - integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -stack-trace@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -stream-exhaust@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/stream-exhaust/-/stream-exhaust-1.0.2.tgz#acdac8da59ef2bc1e17a2c0ccf6c320d120e555d" - integrity sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw== - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"set-blocking@^2.0.0": + "integrity" "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + "version" "2.0.0" + +"set-value@^2.0.0", "set-value@^2.0.1": + "integrity" "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==" + "resolved" "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "extend-shallow" "^2.0.1" + "is-extendable" "^0.1.1" + "is-plain-object" "^2.0.3" + "split-string" "^3.0.1" + +"shebang-command@^2.0.0": + "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "shebang-regex" "^3.0.0" + +"shebang-regex@^3.0.0": + "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + "version" "3.0.0" + +"slash@^3.0.0": + "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + "version" "3.0.0" + +"slice-ansi@^4.0.0": + "integrity" "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "astral-regex" "^2.0.0" + "is-fullwidth-code-point" "^3.0.0" + +"snapdragon-node@^2.0.1": + "integrity" "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==" + "resolved" "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "define-property" "^1.0.0" + "isobject" "^3.0.0" + "snapdragon-util" "^3.0.1" + +"snapdragon-util@^3.0.1": + "integrity" "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==" + "resolved" "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "kind-of" "^3.2.0" + +"snapdragon@^0.8.1": + "integrity" "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==" + "resolved" "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" + "version" "0.8.2" + dependencies: + "base" "^0.11.1" + "debug" "^2.2.0" + "define-property" "^0.2.5" + "extend-shallow" "^2.0.1" + "map-cache" "^0.2.2" + "source-map" "^0.5.6" + "source-map-resolve" "^0.5.0" + "use" "^3.1.0" + +"source-map-resolve@^0.5.0": + "integrity" "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==" + "resolved" "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" + "version" "0.5.3" + dependencies: + "atob" "^2.1.2" + "decode-uri-component" "^0.2.0" + "resolve-url" "^0.2.1" + "source-map-url" "^0.4.0" + "urix" "^0.1.0" + +"source-map-url@^0.4.0": + "integrity" "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + "resolved" "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz" + "version" "0.4.0" + +"source-map@^0.5.6": + "integrity" "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + "version" "0.5.7" + +"source-map@^0.6.1": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"sourcemap-codec@^1.4.4": + "integrity" "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + "resolved" "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" + "version" "1.4.8" + +"sparkles@^1.0.0": + "integrity" "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==" + "resolved" "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz" + "version" "1.0.1" + +"spdx-correct@^3.0.0": + "integrity" "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==" + "resolved" "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "spdx-expression-parse" "^3.0.0" + "spdx-license-ids" "^3.0.0" + +"spdx-exceptions@^2.1.0": + "integrity" "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + "resolved" "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + "version" "2.3.0" + +"spdx-expression-parse@^3.0.0": + "integrity" "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==" + "resolved" "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "spdx-exceptions" "^2.1.0" + "spdx-license-ids" "^3.0.0" + +"spdx-license-ids@^3.0.0": + "integrity" "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" + "resolved" "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz" + "version" "3.0.5" + +"split-string@^3.0.1", "split-string@^3.0.2": + "integrity" "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==" + "resolved" "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "extend-shallow" "^3.0.0" + +"sprintf-js@~1.0.2": + "integrity" "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + "version" "1.0.3" + +"stack-trace@0.0.10": + "integrity" "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + "resolved" "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz" + "version" "0.0.10" + +"static-extend@^0.1.1": + "integrity" "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=" + "resolved" "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" + "version" "0.1.2" + dependencies: + "define-property" "^0.2.5" + "object-copy" "^0.1.0" + +"stream-exhaust@^1.0.1": + "integrity" "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==" + "resolved" "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz" + "version" "1.0.2" + +"stream-shift@^1.0.0": + "integrity" "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + "resolved" "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" + "version" "1.0.1" + +"string_decoder@~1.1.1": + "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "safe-buffer" "~5.1.0" + +"string-width@^1.0.1", "string-width@^1.0.2": + "integrity" "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "code-point-at" "^1.0.0" + "is-fullwidth-code-point" "^1.0.0" + "strip-ansi" "^3.0.0" + +"string-width@^4.2.0": + "integrity" "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.0" + +"strip-ansi@^3.0.0": + "integrity" "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + "version" "3.0.1" dependencies: - ansi-regex "^2.0.0" + "ansi-regex" "^2.0.0" -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== +"strip-ansi@^3.0.1": + "integrity" "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + "version" "3.0.1" dependencies: - ansi-regex "^5.0.0" + "ansi-regex" "^2.0.0" -strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== +"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": + "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + "version" "6.0.1" dependencies: - ansi-regex "^5.0.1" + "ansi-regex" "^5.0.1" -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= +"strip-bom@^2.0.0": + "integrity" "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=" + "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" + "version" "2.0.0" dependencies: - is-utf8 "^0.2.0" + "is-utf8" "^0.2.0" -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== +"strip-indent@^3.0.0": + "integrity" "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==" + "resolved" "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" + "version" "3.0.0" dependencies: - min-indent "^1.0.0" + "min-indent" "^1.0.0" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +"strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1": + "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + "version" "3.1.1" -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== +"supports-color@^5.3.0": + "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + "version" "5.5.0" dependencies: - has-flag "^3.0.0" + "has-flag" "^3.0.0" -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== +"supports-color@^7.1.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" dependencies: - has-flag "^4.0.0" + "has-flag" "^4.0.0" -svelte-preprocess@^4.7.4: - version "4.9.8" - resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-4.9.8.tgz#fd40afebfb352f469beab289667485ebf0d811da" - integrity sha512-EQS/oRZzMtYdAprppZxY3HcysKh11w54MgA63ybtL+TAZ4hVqYOnhw41JVJjWN9dhPnNjjLzvbZ2tMhTsla1Og== +"svelte-preprocess@^4.7.4": + "integrity" "sha512-mDAmaltQl6e5zU2VEtoWEf7eLTfuOTGr9zt+BpA3AGHo8MIhKiNSPE9OLTCTOMgj0vj/uL9QBbaNmpG4G1CgIA==" + "resolved" "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.7.4.tgz" + "version" "4.7.4" dependencies: "@types/pug" "^2.0.4" "@types/sass" "^1.16.0" - detect-indent "^6.0.0" - magic-string "^0.25.7" - sorcery "^0.10.0" - strip-indent "^3.0.0" - -svelte@^3.41.0: - version "3.44.1" - resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.44.1.tgz#5cc772a8340f4519a4ecd1ac1a842325466b1a63" - integrity sha512-4DrCEJoBvdR689efHNSxIQn2pnFwB7E7j2yLEJtHE/P8hxwZWIphCtJ8are7bjl/iVMlcEf5uh5pJ68IwR09vQ== - -sver-compat@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8" - integrity sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg= - dependencies: - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" - -table@^6.0.4: - version "6.0.7" - resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" - integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== - dependencies: - ajv "^7.0.2" - lodash "^4.17.20" - slice-ansi "^4.0.0" - string-width "^4.2.0" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -textextensions@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-3.3.0.tgz#03530d5287b86773c08b77458589148870cc71d3" - integrity sha512-mk82dS8eRABNbeVJrEiN5/UMSCliINAuz8mkUwH4SwslkNP//gbEzlWNS5au0z5Dpx40SQxzqZevZkn+WYJ9Dw== - -through2-filter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" - integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== - dependencies: - through2 "~2.0.0" - xtend "~4.0.0" - -through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -time-stamp@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" - integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= - -to-absolute-glob@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" - integrity sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= - dependencies: - is-absolute "^1.0.0" - is-negated-glob "^1.0.0" - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -to-through@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" - integrity sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY= - dependencies: - through2 "^2.0.3" - -tslib@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - -tslib@^1.8.1: - version "1.13.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" - integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" - integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -typescript@4.4.4: - version "4.4.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" - integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== - -unc-path-regex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" - integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= - -undertaker-registry@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/undertaker-registry/-/undertaker-registry-1.0.1.tgz#5e4bda308e4a8a2ae584f9b9a4359a499825cc50" - integrity sha1-XkvaMI5KiirlhPm5pDWaSZglzFA= - -undertaker@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/undertaker/-/undertaker-1.2.1.tgz#701662ff8ce358715324dfd492a4f036055dfe4b" - integrity sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA== - dependencies: - arr-flatten "^1.0.1" - arr-map "^2.0.0" - bach "^1.0.0" - collection-map "^1.0.0" - es6-weak-map "^2.0.1" - last-run "^1.1.0" - object.defaults "^1.0.0" - object.reduce "^1.0.0" - undertaker-registry "^1.0.0" - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -unique-stream@^2.0.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" - integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== - dependencies: - json-stable-stringify-without-jsonify "^1.0.1" - through2-filter "^3.0.0" - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -v8-compile-cache@^2.0.3: - version "2.2.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" - integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== - -v8flags@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" - integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== - dependencies: - homedir-polyfill "^1.0.1" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -value-or-function@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" - integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= - -vinyl-fs@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" - integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== - dependencies: - fs-mkdirp-stream "^1.0.0" - glob-stream "^6.1.0" - graceful-fs "^4.0.0" - is-valid-glob "^1.0.0" - lazystream "^1.0.0" - lead "^1.0.0" - object.assign "^4.0.4" - pumpify "^1.3.5" - readable-stream "^2.3.3" - remove-bom-buffer "^3.0.0" - remove-bom-stream "^1.2.0" - resolve-options "^1.1.0" - through2 "^2.0.0" - to-through "^2.0.0" - value-or-function "^3.0.0" - vinyl "^2.0.0" - vinyl-sourcemap "^1.1.0" - -vinyl-sourcemap@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" - integrity sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY= - dependencies: - append-buffer "^1.0.2" - convert-source-map "^1.5.0" - graceful-fs "^4.1.6" - normalize-path "^2.1.1" - now-and-later "^2.0.0" - remove-bom-buffer "^3.0.0" - vinyl "^2.0.0" - -vinyl@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" - integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg== - dependencies: - clone "^2.1.1" - clone-buffer "^1.0.0" - clone-stats "^1.0.0" - cloneable-readable "^1.0.0" - remove-trailing-separator "^1.0.1" - replace-ext "^1.0.0" - -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= - -which@^1.2.14: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -xtend@~4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@5.0.0-security.0: - version "5.0.0-security.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz#4ff7271d25f90ac15643b86076a2ab499ec9ee24" - integrity sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ== - dependencies: - camelcase "^3.0.0" - object.assign "^4.1.0" - -yargs-parser@>=5.0.0-security.0: - version "20.2.7" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" - integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== - -yargs@^7.1.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.1.tgz#67f0ef52e228d4ee0d6311acede8850f53464df6" - integrity sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g== - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "5.0.0-security.0" + "detect-indent" "^6.0.0" + "strip-indent" "^3.0.0" + +"svelte@^3.23.0", "svelte@^3.41.0", "svelte@>=3.5.0": + "integrity" "sha512-X9/lnTcRBCrMdyFBVjfmqy1T2vyN8ejUE1OfbWSccc2Z42Amn3ab3XdBgVl+oDkZvzPfPMoxo6CEbWca7pXOew==" + "resolved" "https://registry.npmjs.org/svelte/-/svelte-3.41.0.tgz" + "version" "3.41.0" + +"sver-compat@^1.5.0": + "integrity" "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=" + "resolved" "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz" + "version" "1.5.0" + dependencies: + "es6-iterator" "^2.0.1" + "es6-symbol" "^3.1.1" + +"table@^6.0.4": + "integrity" "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==" + "resolved" "https://registry.npmjs.org/table/-/table-6.0.7.tgz" + "version" "6.0.7" + dependencies: + "ajv" "^7.0.2" + "lodash" "^4.17.20" + "slice-ansi" "^4.0.0" + "string-width" "^4.2.0" + +"text-table@^0.2.0": + "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + "version" "0.2.0" + +"textextensions@^3.2.0": + "integrity" "sha512-mk82dS8eRABNbeVJrEiN5/UMSCliINAuz8mkUwH4SwslkNP//gbEzlWNS5au0z5Dpx40SQxzqZevZkn+WYJ9Dw==" + "resolved" "https://registry.npmjs.org/textextensions/-/textextensions-3.3.0.tgz" + "version" "3.3.0" + +"through2-filter@^3.0.0": + "integrity" "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==" + "resolved" "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "through2" "~2.0.0" + "xtend" "~4.0.0" + +"through2@^2.0.0", "through2@^2.0.3", "through2@~2.0.0": + "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" + "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + "version" "2.0.5" + dependencies: + "readable-stream" "~2.3.6" + "xtend" "~4.0.1" + +"time-stamp@^1.0.0": + "integrity" "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" + "resolved" "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz" + "version" "1.1.0" + +"to-absolute-glob@^2.0.0": + "integrity" "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=" + "resolved" "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "is-absolute" "^1.0.0" + "is-negated-glob" "^1.0.0" + +"to-object-path@^0.3.0": + "integrity" "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=" + "resolved" "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "kind-of" "^3.0.2" + +"to-regex-range@^2.1.0": + "integrity" "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "is-number" "^3.0.0" + "repeat-string" "^1.6.1" + +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "is-number" "^7.0.0" + +"to-regex@^3.0.1", "to-regex@^3.0.2": + "integrity" "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==" + "resolved" "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "define-property" "^2.0.2" + "extend-shallow" "^3.0.2" + "regex-not" "^1.0.2" + "safe-regex" "^1.1.0" + +"to-through@^2.0.0": + "integrity" "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=" + "resolved" "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "through2" "^2.0.3" + +"tslib@*", "tslib@2.3.1": + "integrity" "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" + "version" "2.3.1" + +"tslib@^1.8.1": + "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + "version" "1.14.1" + +"tsutils@^3.21.0": + "integrity" "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==" + "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + "version" "3.21.0" + dependencies: + "tslib" "^1.8.1" + +"type-check@^0.4.0", "type-check@~0.4.0": + "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" + "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + "version" "0.4.0" + dependencies: + "prelude-ls" "^1.2.1" + +"type-fest@^0.20.2": + "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + "version" "0.20.2" + +"type-fest@^0.8.1": + "integrity" "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" + "version" "0.8.1" + +"type@^1.0.1": + "integrity" "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + "resolved" "https://registry.npmjs.org/type/-/type-1.2.0.tgz" + "version" "1.2.0" + +"type@^2.0.0": + "integrity" "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==" + "resolved" "https://registry.npmjs.org/type/-/type-2.0.0.tgz" + "version" "2.0.0" + +"typedarray@^0.0.6": + "integrity" "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + "resolved" "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + "version" "0.0.6" + +"typescript@^3.9.5 || ^4.0.0", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.7.0", "typescript@4.4.4": + "integrity" "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==" + "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz" + "version" "4.4.4" + +"unc-path-regex@^0.1.2": + "integrity" "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" + "resolved" "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz" + "version" "0.1.2" + +"undertaker-registry@^1.0.0": + "integrity" "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=" + "resolved" "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz" + "version" "1.0.1" + +"undertaker@^1.2.1": + "integrity" "sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA==" + "resolved" "https://registry.npmjs.org/undertaker/-/undertaker-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "arr-flatten" "^1.0.1" + "arr-map" "^2.0.0" + "bach" "^1.0.0" + "collection-map" "^1.0.0" + "es6-weak-map" "^2.0.1" + "last-run" "^1.1.0" + "object.defaults" "^1.0.0" + "object.reduce" "^1.0.0" + "undertaker-registry" "^1.0.0" + +"union-value@^1.0.0": + "integrity" "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==" + "resolved" "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "arr-union" "^3.1.0" + "get-value" "^2.0.6" + "is-extendable" "^0.1.1" + "set-value" "^2.0.1" + +"unique-stream@^2.0.2": + "integrity" "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==" + "resolved" "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz" + "version" "2.3.1" + dependencies: + "json-stable-stringify-without-jsonify" "^1.0.1" + "through2-filter" "^3.0.0" + +"unset-value@^1.0.0": + "integrity" "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=" + "resolved" "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "has-value" "^0.3.1" + "isobject" "^3.0.0" + +"upath@^1.1.1": + "integrity" "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + "resolved" "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz" + "version" "1.2.0" + +"uri-js@^4.2.2": + "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" + "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + "version" "4.4.1" + dependencies: + "punycode" "^2.1.0" + +"urix@^0.1.0": + "integrity" "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + "resolved" "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" + "version" "0.1.0" + +"use@^3.1.0": + "integrity" "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + "resolved" "https://registry.npmjs.org/use/-/use-3.1.1.tgz" + "version" "3.1.1" + +"util-deprecate@~1.0.1": + "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "version" "1.0.2" + +"v8-compile-cache@^2.0.3": + "integrity" "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==" + "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz" + "version" "2.2.0" + +"v8flags@^3.2.0": + "integrity" "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==" + "resolved" "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "homedir-polyfill" "^1.0.1" + +"validate-npm-package-license@^3.0.1": + "integrity" "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==" + "resolved" "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "spdx-correct" "^3.0.0" + "spdx-expression-parse" "^3.0.0" + +"value-or-function@^3.0.0": + "integrity" "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=" + "resolved" "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz" + "version" "3.0.0" + +"vinyl-fs@^3.0.0": + "integrity" "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==" + "resolved" "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "fs-mkdirp-stream" "^1.0.0" + "glob-stream" "^6.1.0" + "graceful-fs" "^4.0.0" + "is-valid-glob" "^1.0.0" + "lazystream" "^1.0.0" + "lead" "^1.0.0" + "object.assign" "^4.0.4" + "pumpify" "^1.3.5" + "readable-stream" "^2.3.3" + "remove-bom-buffer" "^3.0.0" + "remove-bom-stream" "^1.2.0" + "resolve-options" "^1.1.0" + "through2" "^2.0.0" + "to-through" "^2.0.0" + "value-or-function" "^3.0.0" + "vinyl" "^2.0.0" + "vinyl-sourcemap" "^1.1.0" + +"vinyl-sourcemap@^1.1.0": + "integrity" "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=" + "resolved" "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "append-buffer" "^1.0.2" + "convert-source-map" "^1.5.0" + "graceful-fs" "^4.1.6" + "normalize-path" "^2.1.1" + "now-and-later" "^2.0.0" + "remove-bom-buffer" "^3.0.0" + "vinyl" "^2.0.0" + +"vinyl@^2.0.0": + "integrity" "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==" + "resolved" "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "clone" "^2.1.1" + "clone-buffer" "^1.0.0" + "clone-stats" "^1.0.0" + "cloneable-readable" "^1.0.0" + "remove-trailing-separator" "^1.0.1" + "replace-ext" "^1.0.0" + +"which-module@^1.0.0": + "integrity" "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + "resolved" "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz" + "version" "1.0.0" + +"which@^1.2.14": + "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" + "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + "version" "1.3.1" + dependencies: + "isexe" "^2.0.0" + +"which@^2.0.1": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"word-wrap@^1.2.3": + "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + "version" "1.2.3" + +"wrap-ansi@^2.0.0": + "integrity" "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "string-width" "^1.0.1" + "strip-ansi" "^3.0.1" + +"wrappy@1": + "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" + +"xtend@~4.0.0", "xtend@~4.0.1": + "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + "version" "4.0.2" + +"y18n@^3.2.1": + "integrity" "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + "resolved" "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz" + "version" "3.2.1" + +"yallist@^4.0.0": + "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + "version" "4.0.0" + +"yargs-parser@>=5.0.0-security.0": + "integrity" "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz" + "version" "20.2.7" + +"yargs-parser@5.0.0-security.0": + "integrity" "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz" + "version" "5.0.0-security.0" + dependencies: + "camelcase" "^3.0.0" + "object.assign" "^4.1.0" + +"yargs@^7.1.0": + "integrity" "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz" + "version" "7.1.1" + dependencies: + "camelcase" "^3.0.0" + "cliui" "^3.2.0" + "decamelize" "^1.1.1" + "get-caller-file" "^1.0.1" + "os-locale" "^1.4.0" + "read-pkg-up" "^1.0.1" + "require-directory" "^2.1.1" + "require-main-filename" "^1.0.1" + "set-blocking" "^2.0.0" + "string-width" "^1.0.2" + "which-module" "^1.0.0" + "y18n" "^3.2.1" + "yargs-parser" "5.0.0-security.0" From 6f344131b4b089454f9c29b3024247160ec98bf6 Mon Sep 17 00:00:00 2001 From: Chris Allan Date: Tue, 30 Nov 2021 15:43:46 -0800 Subject: [PATCH 02/16] Top bar and user list --- scoresaber.user.js | 2942 ++++++++++++++++---------------------------- src/global.ts | 2 + src/header.ts | 47 +- src/main.ts | 57 +- src/settings.ts | 2 +- 5 files changed, 1161 insertions(+), 1889 deletions(-) diff --git a/scoresaber.user.js b/scoresaber.user.js index 5bb5d1f..a552077 100644 --- a/scoresaber.user.js +++ b/scoresaber.user.js @@ -41,8 +41,49 @@ Global.script_version_reg = /\/\/\s*@version\s+([\d.]+)/; Global.user_per_page_global_leaderboard = 50; Global.user_per_page_song_leaderboard = 12; + Global.header_class = "svelte-kbfjj1"; Global.pp_weighting_factor = 0.965; + function setup$3() { + Global.debug = localStorage.getItem("debug") === "true"; + } + function logc(message, ...optionalParams) { + if (Global.debug) { + console.log("DBG", message, ...optionalParams); + } + } + + class SseEventHandler { + constructor(eventName) { + this.eventName = eventName; + this.callList = []; + } + invoke(param) { + logc("Event", this.eventName); + for (const func of this.callList) { + func(param); + } + } + register(func) { + this.callList.push(func); + } + } + class SseEvent { + static addNotification(notify) { + this.notificationList.push(notify); + SseEvent.UserNotification.invoke(); + } + static getNotifications() { + return this.notificationList; + } + } + SseEvent.UserCacheChanged = new SseEventHandler("UserCacheChanged"); + SseEvent.CompareUserChanged = new SseEventHandler("CompareUserChanged"); + SseEvent.PinnedUserChanged = new SseEventHandler("PinnedUserChanged"); + SseEvent.UserNotification = new SseEventHandler("UserNotification"); + SseEvent.StatusInfo = new SseEventHandler("StatusInfo"); + SseEvent.notificationList = []; + function create(tag, attrs, ...children) { if (tag === undefined) throw new Error("'tag' not defined"); @@ -128,11 +169,82 @@ } return elem; } - function as_fragment(builder) { - const frag = document.createDocumentFragment(); - builder(frag); - return frag; + + class Modal { + constructor(elem) { + this.elem = elem; + } + show() { + this.elem.classList.add("is-active"); + document.documentElement.classList.add("is-clipped"); + } + close(answer) { + this.elem.classList.remove("is-active"); + if (!document.querySelector(".modal.is-active")) + document.documentElement.classList.remove("is-clipped"); + if (this.after_close) + this.after_close(answer !== null && answer !== void 0 ? answer : "x"); + } + dispose() { + document.body.removeChild(this.elem); + } + } + function create_modal(opt) { + var _a, _b, _c, _d; + const base_div = create("div", { class: "modal" }); + const modal = new Modal(base_div); + const button_bar = create("div", { class: "buttons" }); + let inner; + switch ((_a = opt.type) !== null && _a !== void 0 ? _a : "content") { + case "content": + inner = create("div", { class: "modal-content" }, create("div", { class: "box" }, opt.text, create("br"), button_bar)); + break; + case "card": + inner = create("div", { class: "modal-card" }, create("header", { class: "modal-card-head" }, (_b = opt.title) !== null && _b !== void 0 ? _b : ""), create("section", { class: "modal-card-body" }, opt.text), create("footer", { class: "modal-card-foot" }, (_c = opt.footer) !== null && _c !== void 0 ? _c : button_bar)); + break; + default: + throw new Error("invalid type"); + } + into(base_div, create("div", { + class: "modal-background", + onclick() { + modal.close("x"); + } + }), inner, create("button", { + class: "modal-close is-large", + onclick() { + modal.close("x"); + } + })); + if (opt.buttons) { + for (const btn_name of Object.keys(opt.buttons)) { + const btn_data = opt.buttons[btn_name]; + into(button_bar, create("button", { + class: ["button", (_d = btn_data.class) !== null && _d !== void 0 ? _d : ""], + onclick() { + modal.close(btn_name); + } + }, btn_data.text)); + } + } + document.body.appendChild(base_div); + if (opt.default) + modal.show(); + return modal; + } + function show_modal(opt) { + return new Promise((resolve) => { + opt.default = true; + const modal = create_modal(opt); + modal.after_close = (answer) => { + modal.dispose(); + resolve(answer); + }; + }); } + const buttons = { + OkOnly: { x: { text: "Ok", class: "is-primary" } }, + }; function check(elem) { if (elem === undefined || elem === null) { @@ -141,34 +253,12 @@ return elem; } - function get_user_header() { - return check(document.querySelector(".player-link")); - } function get_navbar() { return check(document.querySelector("nav")); } function is_user_page() { return window.location.href.toLowerCase().startsWith(Global.scoresaber_link + "/u/"); } - function is_song_leaderboard_page() { - return window.location.href.toLowerCase().startsWith(Global.scoresaber_link + "/leaderboard/"); - } - function get_current_user() { - if (Global._current_user) { - return Global._current_user; - } - if (!is_user_page()) { - throw new Error("Not on a user page"); - } - Global._current_user = get_document_user(document); - return Global._current_user; - } - function get_document_user(doc) { - const username_elem = check(doc.querySelector(".player-link")); - const user_name = username_elem.innerText.trim(); - const user_id = Global.user_reg.exec(window.location.href)[1]; - return { id: user_id, name: user_name }; - } function get_home_user() { if (Global._home_user) { return Global._home_user; @@ -180,57 +270,6 @@ Global._home_user = JSON.parse(json); return Global._home_user; } - function get_compare_user() { - if (Global.last_selected) { - return Global.last_selected; - } - const stored_last = localStorage.getItem("last_selected"); - if (stored_last) { - Global.last_selected = stored_last; - return Global.last_selected; - } - const compare = document.getElementById("user_compare"); - if (compare === null || compare === void 0 ? void 0 : compare.value) { - Global.last_selected = compare.value; - return Global.last_selected; - } - return undefined; - } - function insert_compare_feature(elem) { - if (!is_user_page()) { - throw Error("Invalid call to 'insert_compare_feature'"); - } - setup_compare_feature_list(); - elem.style.marginLeft = "1em"; - into(check(Global.feature_list), elem); - } - function insert_compare_display(elem) { - if (!is_user_page()) { - throw Error("Invalid call to 'insert_compare_display'"); - } - setup_compare_feature_list(); - into(check(Global.feature_display_list), elem); - } - function setup_compare_feature_list() { - if (Global.feature_list === undefined) { - const select_score_order_elem = check(document.querySelector(".btn-group")); - const parent_box_elem = check(select_score_order_elem.parentElement); - Global.feature_list = create("div", { class: "level-item" }); - const level_box_elem = create("div", { class: "level" }, Global.feature_list); - parent_box_elem.replaceChild(level_box_elem, select_score_order_elem); - insert_compare_feature(select_score_order_elem); - Global.feature_display_list = create("div", { class: "level-item" }); - level_box_elem.insertAdjacentElement("afterend", Global.feature_display_list); - } - } - function set_compare_user(user) { - Global.last_selected = user; - localStorage.setItem("last_selected", user); - } - function set_home_user(user) { - Global._home_user = user; - localStorage.setItem("home_user", JSON.stringify(user)); - } function set_wide_table(value) { localStorage.setItem("wide_song_table", value ? "true" : "false"); } @@ -250,11 +289,6 @@ Preview: { short: "👓", long: "Preview", tip: "Preview map" }, BSR: { short: "❗", long: "BeatSaver Request", tip: "Copy !bsr" }, }; - function bmvar(page, button, def) { - return { - display: `var(--sse-show-${page}-${button}, ${def})`, - }; - } function get_button_matrix() { const json = localStorage.getItem("sse_button_matrix"); if (!json) @@ -306,29 +340,6 @@ return bookmarks.includes(song_hash.toLowerCase()); } - function format_en(num, digits) { - if (digits === undefined) - digits = 2; - return num.toLocaleString("en", { minimumFractionDigits: digits, maximumFractionDigits: digits }); - } - function toggled_class(bool, css_class) { - return bool ? css_class : ""; - } - function number_invariant(num) { - return Number(num.replace(/,/g, "")); - } - function number_to_timespan(num) { - const SECONDS_IN_MINUTE = 60; - const MINUTES_IN_HOUR = 60; - let str = ""; - let mod = (num % SECONDS_IN_MINUTE); - str = mod.toFixed(0).padStart(2, "0") + str; - num = (num - mod) / SECONDS_IN_MINUTE; - mod = (num % MINUTES_IN_HOUR); - str = mod.toFixed(0).padStart(2, "0") + ":" + str; - num = (num - mod) / MINUTES_IN_HOUR; - return str; - } function round2(num) { return Math.round(num * 100) / 100; } @@ -336,88 +347,312 @@ return moment.utc(date, "YYYY-MM-DD HH:mm:ss UTC"); } - class Limiter { - constructor() { - this.ratelimit_reset = undefined; - this.ratelimit_remaining = undefined; + const CURRENT_DATA_VER = 1; + function load() { + const json = localStorage.getItem("users"); + if (!json) { + reset_data(); + return; } - async wait() { - const now = unix_timestamp(); - if (this.ratelimit_reset === undefined || now > this.ratelimit_reset) { - this.ratelimit_reset = undefined; - this.ratelimit_remaining = undefined; - return; - } - if (this.ratelimit_remaining === 0) { - const sleepTime = (this.ratelimit_reset - now); - console.log(`Waiting for cloudflare rate limiter... ${sleepTime}sec`); - await sleep(sleepTime * 1000); - this.ratelimit_remaining = this.ratelimit_limit; - this.ratelimit_reset = undefined; - } + try { + Global.user_list = JSON.parse(json); } - setLimitData(remaining, reset, limit) { - this.ratelimit_remaining = remaining; - this.ratelimit_reset = reset; - this.ratelimit_limit = limit; + catch (ex) { + console.error("Failed to read user cache, resetting!"); + reset_data(); + return; + } + let users_data_ver = get_data_ver(); + if (users_data_ver !== CURRENT_DATA_VER) { + logc("Updating usercache format"); + if (users_data_ver <= 0) { + for (const user of Object.values(Global.user_list)) { + for (const song of Object.values(user.songs)) { + const time = read_inline_date(song.time); + song.time = time.toISOString(); + } + } + users_data_ver = 1; + } + update_data_ver(); + save(); + logc("Update successful"); } + logc("Loaded usercache", Global.user_list); } - async function sleep(timeout) { - return new Promise(resolve => setTimeout(resolve, timeout)); + function reset_data() { + Global.user_list = {}; + localStorage.setItem("users", "{}"); + update_data_ver(); } - function unix_timestamp() { - return Math.round((new Date()).getTime() / 1000); + function get_data_ver() { + var _a; + return Number((_a = localStorage.getItem("users_data_ver")) !== null && _a !== void 0 ? _a : "0"); } - - function setup$3() { - Global.debug = localStorage.getItem("debug") === "true"; + function update_data_ver() { + localStorage.setItem("users_data_ver", String(CURRENT_DATA_VER)); } - function logc(message, ...optionalParams) { - if (Global.debug) { - console.log("DBG", message, ...optionalParams); - } + function save() { + localStorage.setItem("users", JSON.stringify(Global.user_list)); } - let SSE_addStyle; - let SSE_xmlhttpRequest; - let SSE_info; - function setup$2() { - if (typeof (GM) !== "undefined") { - logc("Using GM.* extenstions", GM); - SSE_addStyle = GM_addStyle_custom; - SSE_xmlhttpRequest = GM.xmlHttpRequest; - SSE_info = GM.info; - } - else { - logc("Using GM_ extenstions"); - SSE_addStyle = GM_addStyle; - SSE_xmlhttpRequest = GM_xmlhttpRequest; - SSE_info = GM_info; - } - } - function GM_addStyle_custom(css) { - const style = create("style"); - style.innerHTML = css; - into(document.head, style); - return style; - } - async function load_chart_lib() { - if (typeof Chart !== "function") { - try { - const resp = await fetch("https://old.scoresaber.com/imports/js/chart.js"); - const js = await resp.text(); - new Function(js)(); - } - catch (err) { - console.warn("Failed to fetch chartjs. Charts might not work", err); - return false; + function setup_self_button() { + var _b; + let _a, _d, _a_hover = false, _d_hover = false; + const home_user = (_b = get_home_user()) !== null && _b !== void 0 ? _b : { name: "", id: "0" }; + into(get_navbar(), _a = create("a", { + id: "home_user", + class: Global.header_class, + href: Global.scoresaber_link + "/u/" + home_user.id + }, home_user.name, _d = create("div", { + id: "home_user_list", + class: "userMenu " + Global.header_class, + style: { + width: "initial" } - } - return true; + }))); + const _hide = () => (!_a_hover && !_d_hover) ? _d.classList.remove("visible") : 0; + _a.addEventListener("mouseenter", () => { + _a_hover = true; + _d.classList.add("visible"); + }); + _d.addEventListener("mouseenter", () => { + _d_hover = true; + _d.classList.add("visible"); + }); + _a.addEventListener("mouseleave", () => { + _a_hover = false; + setTimeout(_hide, 200); + }); + _d.addEventListener("mouseleave", () => { + _d_hover = false; + setTimeout(_hide, 200); + }); + update_self_user_list(); + SseEvent.UserCacheChanged.register(update_self_user_list); + SseEvent.PinnedUserChanged.register(update_self_button); } - - function fetch2(url) { - return new Promise((resolve, reject) => { + function update_self_button() { + var _b; + const home_user = (_b = get_home_user()) !== null && _b !== void 0 ? _b : { name: "", id: "0" }; + const home_elem = document.getElementById("home_user"); + if (home_elem) { + home_elem.href = Global.scoresaber_link + "/u/" + home_user.id; + home_elem.innerText = home_user.name; + } + } + function update_self_user_list() { + const home_user_list_elem = check(document.getElementById("home_user_list")); + intor(home_user_list_elem, ...Object.entries(Global.user_list).map(([id, user]) => { + return create("a", { + class: Global.header_class, + style: { + paddingRight: "1em", + flexWrap: "nowrap", + display: "flex", + }, + href: Global.scoresaber_link + "/u/" + id, + }, create("div", { style: { flex: "1" } }, user.name), create("div", { + class: "button icon is-medium is-danger is-outlined", + style: { marginLeft: "3em" }, + async onclick(ev) { + ev.preventDefault(); + ev.stopPropagation(); + const response = await show_modal({ + text: `Delete User "${user.name}" from cache?`, + buttons: { + delete: { text: "Delete", class: "is-danger" }, + x: { text: "Abort", class: "is-info" } + }, + }); + if (response === "delete") { + logc("Delete user", id, user.name); + delete_user(id); + } + } + }, create("i", { class: "fas fa-trash-alt" }))); + })); + } + function delete_user(user_id) { + if (Global.user_list[user_id]) { + delete Global.user_list[user_id]; + save(); + SseEvent.UserCacheChanged.invoke(); + } + } + + let SSE_addStyle; + let SSE_xmlhttpRequest; + function setup$2() { + if (typeof (GM) !== "undefined") { + logc("Using GM.* extenstions", GM); + SSE_addStyle = GM_addStyle_custom; + SSE_xmlhttpRequest = GM.xmlHttpRequest; + GM.info; + } + else { + logc("Using GM_ extenstions"); + SSE_addStyle = GM_addStyle; + SSE_xmlhttpRequest = GM_xmlhttpRequest; + GM_info; + } + } + function GM_addStyle_custom(css) { + const style = create("style"); + style.innerHTML = css; + into(document.head, style); + return style; + } + + const themes = ["Default", "Cerulean", "Cosmo", "Cyborg", "Darkly", "Flatly", + "Journal", "Litera", "Lumen", "Lux", "Materia", "Minty", "Nuclear", "Pulse", + "Sandstone", "Simplex", "Slate", "Solar", "Spacelab", "Superhero", "United", + "Yeti"]; + const dark_themes = ["Cyborg", "Darkly", "Nuclear", "Slate", "Solar", "Superhero"]; + const theme_light = `:root { + --color-ahead: rgb(128, 255, 128); + --color-behind: rgb(255, 128, 128); + --color-highlight: lightgreen; +}`; + const theme_dark = `:root { + --color-ahead: rgb(0, 128, 0); + --color-behind: rgb(128, 0, 0); + --color-highlight: darkgreen; +} +.BS_bg_btn { + background-color: white; +} +/* Reset colors for generic themes */ +span.songBottom.time, span.scoreBottom, span.scoreTop.ppWeightedValue { + color:unset; +} +span.songTop.pp, span.scoreTop.ppValue, span.scoreTop.ppLabel, span.songTop.mapper { + text-shadow: 1px 1px 2px #000; +}`; + function setup$1() { + const style_data = `.compact { + padding-right: 0 !important; + padding-left: 0 !important; + margin-left: 0px !important; + margin-right: 0px !important; + text-align: center !important; +} + +h5 > * { + margin-right: 0.3em; +} + +.wide_song_table { + max-width: unset !important; +} + +#leaderboard_tool_strip > * { + margin-right: 0.5em; +} + +.offset_tab { + margin-left: auto; +} + +.beatsaver_bg { + background: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200' viewBox='0 0 200 200' version='1.1'%3E%3Cg fill='none' stroke='%23000000' stroke-width='10'%3E %3Cpath d='M 100,7 189,47 100,87 12,47 Z' stroke-linejoin='round'/%3E %3Cpath d='M 189,47 189,155 100,196 12,155 12,47' stroke-linejoin='round'/%3E %3Cpath d='M 100,87 100,196' stroke-linejoin='round'/%3E %3Cpath d='M 26,77 85,106 53,130 Z' stroke-linejoin='round'/%3E %3C/g%3E %3C/svg%3E") no-repeat center/85%; + width: 100%; + height: 100%; +} + +.fas_big { + line-height: 150%; + padding-right: 0.5em; + padding-left: 0.5em; + min-width: 2.25em; + /* Fix for some themes overriding font */ + font-weight: 900; + font-family: "Font Awesome 5 Free"; +} + +.fas_big::before { + font-size: 120%; +} + +[data-tooltip]::before { + visibility: hidden; + background-color: #555; + color: #fff; + border-radius: 6px; + position: absolute; + z-index: 1; + margin-top: -5px; + opacity: 0; + transition: opacity 0.3s; + padding: 0.2em 1em; + content: attr(data-tooltip); + /* Default */ + top: 0; + left: 50%; + right: auto; + bottom: auto; + transform: translate(-50%, -100%); +} +[data-tooltip].has-tooltip-left::before { + top: auto; + right: auto; + bottom: 50%; + left: -11px; + transform: translate(-100%, 50%); +} +[data-tooltip]:hover::before { + visibility: visible; + opacity: 1; +} + +@keyframes fill_anim { + 0%{background-position:top;} + 20%{background-position:bottom;} + 80%{background-position:bottom;} + 100%{background-position:top;} +} +.button_error { + background: linear-gradient(to top, red 50%, transparent 50%); + background-size: 100% 200%; + background-position:top; + animation: fill_anim 3s cubic-bezier(.23,1,.32,1) forwards; +} +.button_success { + background: linear-gradient(to top, green 50%, transparent 50%); + background-size: 100% 200%; + background-position:top; + animation: fill_anim 3s cubic-bezier(.23,1,.32,1) forwards; +} + +/* Fix weird tab list offset */ + +.content li { + margin-top: 0; +} + +/* Fix bulma+scoresable dark color */ +/* Theme CSS will be appended and can therefore + * conveniently overwrite those rules. + * This makes them effectively useful for the default + * Light/Dark Themes of ScoreSaber */ + +.navbar-dropdown, .modal-card-head, .modal-card-foot { + color: var(--textColor, black); + background-color: var(--background, white); + border-color: var(--foreground, #dbdbdb); +} + +.box, .modal-card-body { + color: var(--textColor, black); + background-color: var(--background, white); +} +`; + SSE_addStyle(style_data); + into(document.head, create("link", { rel: "stylesheet", href: "https://cdn.jsdelivr.net/npm/bulma-checkradio/dist/css/bulma-checkradio.min.css" })); + } + + function fetch2(url) { + return new Promise((resolve, reject) => { const host = get_hostname(url); const request_param = { method: "GET", @@ -451,921 +686,598 @@ window.open(link, "_blank"); } - class SessionCache { - constructor(prefix) { - this.prefix = prefix; - if (prefix === undefined) - throw Error("Prefix must be set. If you don't want a prefix, explicitely pass ''."); - } - get(key) { - const item = sessionStorage.getItem(this.prefix + key); - if (item === null) - return undefined; - return JSON.parse(item); - } - set(key, value) { - sessionStorage.setItem(this.prefix + key, JSON.stringify(value)); - } + function noop() { } + function run(fn) { + return fn(); } - - const api_cache$1 = new SessionCache("saver"); - async function get_data_by_hash(song_hash) { - const cached_data = api_cache$1.get(song_hash); - if (cached_data !== undefined) - return cached_data; - try { - const data_str = await fetch2(`https://api.beatsaver.com/maps/hash/${song_hash}`); - const data = JSON.parse(data_str); - api_cache$1.set(song_hash, data); - return data; - } - catch (err) { - logc("Failed to download song data", err); - return undefined; - } + function blank_object() { + return Object.create(null); } - async function get_scoresaber_data_by_hash(song_hash, diff_name) { - try { - const diff_value = diff_name === undefined ? 0 : diff_name_to_value(diff_name); - const data_str = await fetch2(`https://beatsaver.com/api/scores/${song_hash}/0?difficulty=${diff_value}&gameMode=0`); - const data = JSON.parse(data_str); - return data; - } - catch (err) { - logc("Failed to download song data", err); - return undefined; - } + function run_all(fns) { + fns.forEach(run); } - - class Modal { - constructor(elem) { - this.elem = elem; - } - show() { - this.elem.classList.add("is-active"); - document.documentElement.classList.add("is-clipped"); - } - close(answer) { - this.elem.classList.remove("is-active"); - if (!document.querySelector(".modal.is-active")) - document.documentElement.classList.remove("is-clipped"); - if (this.after_close) - this.after_close(answer !== null && answer !== void 0 ? answer : "x"); - } - dispose() { - document.body.removeChild(this.elem); - } + function is_function(thing) { + return typeof thing === 'function'; } - function create_modal(opt) { - var _a, _b, _c, _d; - const base_div = create("div", { class: "modal" }); - const modal = new Modal(base_div); - const button_bar = create("div", { class: "buttons" }); - let inner; - switch ((_a = opt.type) !== null && _a !== void 0 ? _a : "content") { - case "content": - inner = create("div", { class: "modal-content" }, create("div", { class: "box" }, opt.text, create("br"), button_bar)); - break; - case "card": - inner = create("div", { class: "modal-card" }, create("header", { class: "modal-card-head" }, (_b = opt.title) !== null && _b !== void 0 ? _b : ""), create("section", { class: "modal-card-body" }, opt.text), create("footer", { class: "modal-card-foot" }, (_c = opt.footer) !== null && _c !== void 0 ? _c : button_bar)); - break; - default: - throw new Error("invalid type"); - } - into(base_div, create("div", { - class: "modal-background", - onclick() { - modal.close("x"); - } - }), inner, create("button", { - class: "modal-close is-large", - onclick() { - modal.close("x"); - } - })); - if (opt.buttons) { - for (const btn_name of Object.keys(opt.buttons)) { - const btn_data = opt.buttons[btn_name]; - into(button_bar, create("button", { - class: ["button", (_d = btn_data.class) !== null && _d !== void 0 ? _d : ""], - onclick() { - modal.close(btn_name); - } - }, btn_data.text)); - } - } - document.body.appendChild(base_div); - if (opt.default) - modal.show(); - return modal; + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function'); } - function show_modal(opt) { - return new Promise((resolve) => { - opt.default = true; - const modal = create_modal(opt); - modal.after_close = (answer) => { - modal.dispose(); - resolve(answer); - }; - }); + function is_empty(obj) { + return Object.keys(obj).length === 0; } - const buttons = { - OkOnly: { x: { text: "Ok", class: "is-primary" } }, - }; - - function get_song_compare_value(song_a, song_b) { - if (song_a.pp > 0 || song_b.pp > 0) { - return [song_a.pp, song_b.pp]; - } - else if (song_a.score !== undefined && song_b.score !== undefined) { - return [song_a.score, song_b.score]; - } - else if (song_a.accuracy !== undefined && song_b.accuracy !== undefined) { - return [song_a.accuracy * get_song_mod_multiplier(song_a), song_b.accuracy * get_song_mod_multiplier(song_b)]; + function append(target, node) { + target.appendChild(node); + } + function append_styles(target, style_sheet_id, styles) { + const append_styles_to = get_root_for_style(target); + if (!append_styles_to.getElementById(style_sheet_id)) { + const style = element('style'); + style.id = style_sheet_id; + style.textContent = styles; + append_stylesheet(append_styles_to, style); } - else { - return [-1, -1]; - } - } - function get_song_mod_multiplier(song) { - if (!song.mods) - return 1.0; - let multiplier = 1.0; - for (const mod of song.mods) { - switch (mod) { - case "NF": - multiplier -= 0.50; - break; - case "NO": - multiplier -= 0.05; - break; - case "NB": - multiplier -= 0.10; - break; - case "SS": - multiplier -= 0.30; - break; - case "NA": - multiplier -= 0.30; - break; - case "DA": - multiplier += 0.07; - break; - case "GN": - multiplier += 0.11; - break; - case "FS": - multiplier += 0.08; - break; - } + } + function get_root_for_style(node) { + if (!node) + return document; + const root = node.getRootNode ? node.getRootNode() : node.ownerDocument; + if (root.host) { + return root; } - return Math.max(0, multiplier); + return document; } - function get_song_hash_from_text(text) { - var _a; - const res = Global.song_hash_reg.exec(text); - return res ? (_a = res[1]) === null || _a === void 0 ? void 0 : _a.toLowerCase() : undefined; + function append_stylesheet(node, style) { + append(node.head || node, style); } - async function oneclick_install(song_key) { - const lastCheck = localStorage.getItem("oneclick-prompt"); - const prompt = !lastCheck || - new Date(lastCheck).getTime() + (1000 * 60 * 60 * 24 * 31) < new Date().getTime(); - if (prompt) { - localStorage.setItem("oneclick-prompt", new Date().getTime().toString()); - const resp = await show_modal({ - buttons: { - install: { text: "Get ModAssistant Installer", class: "is-info" }, - done: { text: "OK, now leave me alone", class: "is-success" }, - }, - text: "OneClick™ requires any current ModInstaller tool with the OneClick™ feature enabled.\nMake sure you have one installed before proceeding.", - }); - if (resp === "install") { - window.open("https://github.com/Assistant/ModAssistant/releases"); - return; - } - } - console.log("Downloading: ", song_key); - window.location.assign(`beatsaver://${song_key}`); + function insert(target, node, anchor) { + target.insertBefore(node, anchor || null); } - function song_equals(a, b) { - if (a === b) - return true; - if (a === undefined || b === undefined) - return false; - return (a.accuracy === b.accuracy && - a.pp === b.pp && - a.score === b.score && - a.time === b.time && - array_equals(a.mods, b.mods)); + function detach(node) { + node.parentNode.removeChild(node); } - function array_equals(a, b) { - if (a === b) - return true; - if (a === undefined || b === undefined) - return false; - if (a.length !== b.length) - return false; - for (let i = 0; i < a.length; i++) { - if (a[i] !== b[i]) - return false; + function destroy_each(iterations, detaching) { + for (let i = 0; i < iterations.length; i += 1) { + if (iterations[i]) + iterations[i].d(detaching); } - return true; } - function parse_mods(mods) { - if (!mods) - return undefined; - const modarr = mods.split(/,/g); - if (modarr.length === 0) - return undefined; - return modarr; + function element(name) { + return document.createElement(name); } - function get_notes_count(diff_name, characteristic, version) { - var _a; - if (diff_name === "Expert+") - diff_name = "ExpertPlus"; - const diff = version.diffs.find((d) => (d.characteristic === characteristic && d.difficulty === diff_name)); - return (_a = diff === null || diff === void 0 ? void 0 : diff.notes) !== null && _a !== void 0 ? _a : -1; - } - function calculate_max_score(notes) { - const note_score = 115; - if (notes <= 1) - return note_score * (0 + (notes - 0) * 1); - if (notes <= 5) - return note_score * (1 + (notes - 1) * 2); - if (notes <= 13) - return note_score * (9 + (notes - 5) * 4); - return note_score * (41 + (notes - 13) * 8); - } - function diff_name_to_value(name) { - switch (name) { - case "Easy": return 1; - case "Medium": return 3; - case "Hard": return 5; - case "Expert": return 7; - case "ExpertPlus": return 9; - default: return -1; - } + function text(data) { + return document.createTextNode(data); } - - const SCORESABER_LINK = "https://new.scoresaber.com/api"; - const API_LIMITER = new Limiter(); - async function get_user_recent_songs_dynamic(user_id, page) { - logc(`Fetching user ${user_id} page ${page}`); - return get_user_recent_songs_new_api_wrap(user_id, page); + function space() { + return text(' '); } - async function get_user_recent_songs_new_api_wrap(user_id, page) { - const recent_songs = await get_user_recent_songs(user_id, page); - if (!recent_songs) { - return { - meta: { was_last_page: true }, - songs: [] - }; - } - return { - meta: { - was_last_page: recent_songs.scores.length < 8 - }, - songs: recent_songs.scores.map(s => [String(s.leaderboardId), { - time: s.timeSet, - pp: s.pp, - accuracy: s.maxScore !== 0 ? round2((s.unmodififiedScore / s.maxScore) * 100) : undefined, - score: s.score, - mods: parse_mods(s.mods) - }]) - }; + function listen(node, event, handler, options) { + node.addEventListener(event, handler, options); + return () => node.removeEventListener(event, handler, options); } - async function get_user_recent_songs(user_id, page) { - const req = await auto_fetch_retry(`${SCORESABER_LINK}/player/${user_id}/scores/recent/${page}`); - if (req.status === 404) { - return null; - } - const data = await req.json(); - return sanitize_song_ids(data); + function attr(node, attribute, value) { + if (value == null) + node.removeAttribute(attribute); + else if (node.getAttribute(attribute) !== value) + node.setAttribute(attribute, value); } - async function get_user_info_basic(user_id) { - const req = await auto_fetch_retry(`${SCORESABER_LINK}/player/${user_id}/basic`); - const data = await req.json(); - return sanitize_player_ids(data); + function children(element) { + return Array.from(element.childNodes); } - async function auto_fetch_retry(url) { - const MAX_RETRIES = 20; - const SLEEP_WAIT = 5000; - for (let retries = MAX_RETRIES; retries >= 0; retries--) { - await API_LIMITER.wait(); - const response = await fetch(url); - const remaining = Number(response.headers.get("x-ratelimit-remaining")); - const reset = Number(response.headers.get("x-ratelimit-reset")); - const limit = Number(response.headers.get("x-ratelimit-limit")); - API_LIMITER.setLimitData(remaining, reset, limit); - if (response.status === 429) { - await sleep(SLEEP_WAIT); - } - else { - return response; + function select_option(select, value) { + for (let i = 0; i < select.options.length; i += 1) { + const option = select.options[i]; + if (option.__value === value) { + option.selected = true; + return; } } - throw new Error("Can't fetch data from new.scoresaber."); } - function sanitize_player_ids(data) { - data.playerInfo.playerId = String(data.playerInfo.playerId); - return data; + function select_value(select) { + const selected_option = select.querySelector(':checked') || select.options[0]; + return selected_option && selected_option.__value; } - function sanitize_song_ids(data) { - for (const s of data.scores) { - s.scoreId = String(s.scoreId); - s.leaderboardId = String(s.leaderboardId); - s.playerId = String(s.playerId); - } - return data; + function toggle_class(element, name, toggle) { + element.classList[toggle ? 'add' : 'remove'](name); } - class SseEventHandler { - constructor(eventName) { - this.eventName = eventName; - this.callList = []; - } - invoke(param) { - logc("Event", this.eventName); - for (const func of this.callList) { - func(param); - } - } - register(func) { - this.callList.push(func); - } - } - class SseEvent { - static addNotification(notify) { - this.notificationList.push(notify); - SseEvent.UserNotification.invoke(); - } - static getNotifications() { - return this.notificationList; - } + let current_component; + function set_current_component(component) { + current_component = component; } - SseEvent.UserCacheChanged = new SseEventHandler("UserCacheChanged"); - SseEvent.CompareUserChanged = new SseEventHandler("CompareUserChanged"); - SseEvent.PinnedUserChanged = new SseEventHandler("PinnedUserChanged"); - SseEvent.UserNotification = new SseEventHandler("UserNotification"); - SseEvent.StatusInfo = new SseEventHandler("StatusInfo"); - SseEvent.notificationList = []; - const CURRENT_DATA_VER = 1; - function load() { - const json = localStorage.getItem("users"); - if (!json) { - reset_data(); - return; - } - try { - Global.user_list = JSON.parse(json); + const dirty_components = []; + const binding_callbacks = []; + const render_callbacks = []; + const flush_callbacks = []; + const resolved_promise = Promise.resolve(); + let update_scheduled = false; + function schedule_update() { + if (!update_scheduled) { + update_scheduled = true; + resolved_promise.then(flush); } - catch (ex) { - console.error("Failed to read user cache, resetting!"); - reset_data(); + } + function add_render_callback(fn) { + render_callbacks.push(fn); + } + let flushing = false; + const seen_callbacks = new Set(); + function flush() { + if (flushing) return; - } - let users_data_ver = get_data_ver(); - if (users_data_ver !== CURRENT_DATA_VER) { - logc("Updating usercache format"); - if (users_data_ver <= 0) { - for (const user of Object.values(Global.user_list)) { - for (const song of Object.values(user.songs)) { - const time = read_inline_date(song.time); - song.time = time.toISOString(); - } + flushing = true; + do { + // first, call beforeUpdate functions + // and update components + for (let i = 0; i < dirty_components.length; i += 1) { + const component = dirty_components[i]; + set_current_component(component); + update(component.$$); + } + set_current_component(null); + dirty_components.length = 0; + while (binding_callbacks.length) + binding_callbacks.pop()(); + // then, once components are updated, call + // afterUpdate functions. This may cause + // subsequent updates... + for (let i = 0; i < render_callbacks.length; i += 1) { + const callback = render_callbacks[i]; + if (!seen_callbacks.has(callback)) { + // ...so guard against infinite loops + seen_callbacks.add(callback); + callback(); } - users_data_ver = 1; } - update_data_ver(); - save(); - logc("Update successful"); + render_callbacks.length = 0; + } while (dirty_components.length); + while (flush_callbacks.length) { + flush_callbacks.pop()(); } - logc("Loaded usercache", Global.user_list); - } - function reset_data() { - Global.user_list = {}; - localStorage.setItem("users", "{}"); - update_data_ver(); - } - function get_data_ver() { - var _a; - return Number((_a = localStorage.getItem("users_data_ver")) !== null && _a !== void 0 ? _a : "0"); + update_scheduled = false; + flushing = false; + seen_callbacks.clear(); } - function update_data_ver() { - localStorage.setItem("users_data_ver", String(CURRENT_DATA_VER)); + function update($$) { + if ($$.fragment !== null) { + $$.update(); + run_all($$.before_update); + const dirty = $$.dirty; + $$.dirty = [-1]; + $$.fragment && $$.fragment.p($$.ctx, dirty); + $$.after_update.forEach(add_render_callback); + } } - function save() { - localStorage.setItem("users", JSON.stringify(Global.user_list)); + const outroing = new Set(); + let outros; + function group_outros() { + outros = { + r: 0, + c: [], + p: outros // parent group + }; } - - function setup_user_compare() { - if (!is_user_page()) { - return; - } - const header = get_user_header(); - header.style.display = "flex"; - header.style.alignItems = "center"; - const user = get_current_user(); - into(header, create("div", { - class: "button icon is-medium", - style: { cursor: "pointer" }, - data: { tooltip: Global.user_list[user.id] ? "Update score cache" : "Add user to your score cache" }, - async onclick() { - await fetch_user(get_current_user().id); - }, - }, create("i", { class: ["fas", Global.user_list[user.id] ? "fa-sync" : "fa-bookmark"] }))); - const status_elem = create("div"); - into(header, status_elem); - SseEvent.StatusInfo.register((status) => intor(status_elem, status.text)); - Global.users_elem = create("div"); - insert_compare_feature(Global.users_elem); - update_user_compare_dropdown(); - SseEvent.UserCacheChanged.register(update_user_compare_dropdown); - SseEvent.CompareUserChanged.invoke(); - } - function update_user_compare_dropdown() { - if (!is_user_page()) { - return; + function check_outros() { + if (!outros.r) { + run_all(outros.c); } - const compare = get_compare_user(); - intor(Global.users_elem, create("div", { class: "select" }, create("select", { - id: "user_compare", - onchange() { - const user = this.value; - set_compare_user(user); - SseEvent.CompareUserChanged.invoke(); - } - }, create("option", { value: undefined, selected: compare === undefined }, "(None)"), ...Object.entries(Global.user_list).map(([id, user]) => { - return create("option", { value: id, selected: compare === id }, user.name); - })))); + outros = outros.p; } - async function fetch_user(user_id, force = false) { - var _a, _b; - let user = Global.user_list[user_id]; - if (!user) { - user = { - name: "User" + user_id, - songs: {} - }; - Global.user_list[user_id] = user; - } - let page_max = undefined; - let user_name = user.name; - let updated = false; - SseEvent.StatusInfo.invoke({ text: `Fetching user ${user_name}` }); - if (get_use_new_ss_api()) { - const user_data = await get_user_info_basic(user_id); - user_name = user_data.playerInfo.playerName; - } - for (let page = 1;; page++) { - SseEvent.StatusInfo.invoke({ text: `Updating user ${user_name} page ${page}/${(page_max !== null && page_max !== void 0 ? page_max : "?")}` }); - const recent_songs = await get_user_recent_songs_dynamic(user_id, page); - const { has_old_entry, has_updated } = process_user_page(recent_songs.songs, user); - updated = updated || has_updated; - page_max = (_a = recent_songs.meta.max_pages) !== null && _a !== void 0 ? _a : page_max; - user_name = (_b = recent_songs.meta.user_name) !== null && _b !== void 0 ? _b : user_name; - if ((!force && has_old_entry) || recent_songs.meta.was_last_page) { - break; - } - } - user.name = user_name !== null && user_name !== void 0 ? user_name : user.name; - if (updated) { - save(); + function transition_in(block, local) { + if (block && block.i) { + outroing.delete(block); + block.i(local); } - SseEvent.StatusInfo.invoke({ text: `User ${user_name} updated` }); - SseEvent.UserCacheChanged.invoke(); } - async function fetch_all(force = false) { - const users = Object.keys(Global.user_list); - for (const user of users) { - await fetch_user(user, force); + function transition_out(block, local, detach, callback) { + if (block && block.o) { + if (outroing.has(block)) + return; + outroing.add(block); + outros.c.push(() => { + outroing.delete(block); + if (callback) { + if (detach) + block.d(1); + callback(); + } + }); + block.o(local); } - SseEvent.StatusInfo.invoke({ text: `All users updated` }); } - function process_user_page(songs, user) { - let has_old_entry = false; - let has_updated = false; - for (const [song_id, song] of songs) { - const song_old = user.songs[song_id]; - if (!song_old || !song_equals(song_old, song)) { - logc("Updated: ", song_old, song); - has_updated = true; - } - else { - logc("Old found: ", song); - has_old_entry = true; - } - user.songs[song_id] = song; + function create_component(block) { + block && block.c(); + } + function mount_component(component, target, anchor, customElement) { + const { fragment, on_mount, on_destroy, after_update } = component.$$; + fragment && fragment.m(target, anchor); + if (!customElement) { + // onMount happens before the initial afterUpdate + add_render_callback(() => { + const new_on_destroy = on_mount.map(run).filter(is_function); + if (on_destroy) { + on_destroy.push(...new_on_destroy); + } + else { + // Edge case - component was destroyed immediately, + // most likely as a result of a binding initialising + run_all(new_on_destroy); + } + component.$$.on_mount = []; + }); } - return { has_old_entry, has_updated }; + after_update.forEach(add_render_callback); } - - function setup_self_pin_button() { - if (!is_user_page()) { - return; + function destroy_component(component, detaching) { + const $$ = component.$$; + if ($$.fragment !== null) { + run_all($$.on_destroy); + $$.fragment && $$.fragment.d(detaching); + // TODO null out other refs, including component.$$ (but need to + // preserve final state?) + $$.on_destroy = $$.fragment = null; + $$.ctx = []; } - const header = get_user_header(); - into(header, create("div", { - class: "button icon is-medium", - style: { cursor: "pointer" }, - data: { tooltip: "Pin this user to your navigation bar" }, - onclick() { - set_home_user(get_current_user()); - SseEvent.PinnedUserChanged.invoke(); - } - }, create("i", { class: "fas fa-thumbtack" }))); } - function setup_self_button() { - var _a; - const home_user = (_a = get_home_user()) !== null && _a !== void 0 ? _a : { name: "", id: "0" }; - into(get_navbar(), create("div", { class: "navbar-item has-dropdown is-hoverable" }, create("a", { - id: "home_user", - class: "navbar-item", - href: Global.scoresaber_link + "/u/" + home_user.id - }, home_user.name), create("div", { - id: "home_user_list", - class: "navbar-dropdown" - }))); - update_self_user_list(); - SseEvent.UserCacheChanged.register(update_self_user_list); - SseEvent.PinnedUserChanged.register(update_self_button); - } - function update_self_button() { - var _a; - const home_user = (_a = get_home_user()) !== null && _a !== void 0 ? _a : { name: "", id: "0" }; - const home_elem = document.getElementById("home_user"); - if (home_elem) { - home_elem.href = Global.scoresaber_link + "/u/" + home_user.id; - home_elem.innerText = home_user.name; + function make_dirty(component, i) { + if (component.$$.dirty[0] === -1) { + dirty_components.push(component); + schedule_update(); + component.$$.dirty.fill(0); } + component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31)); } - function update_self_user_list() { - const home_user_list_elem = check(document.getElementById("home_user_list")); - intor(home_user_list_elem, ...Object.entries(Global.user_list).map(([id, user]) => { - return create("a", { - class: "navbar-item", - style: { - paddingRight: "1em", - flexWrap: "nowrap", - display: "flex", - }, - href: Global.scoresaber_link + "/u/" + id, - }, create("div", { style: { flex: "1" } }, user.name), create("div", { - class: "button icon is-medium is-danger is-outlined", - style: { marginLeft: "3em" }, - async onclick(ev) { - ev.preventDefault(); - ev.stopPropagation(); - const response = await show_modal({ - text: `Delete User "${user.name}" from cache?`, - buttons: { - delete: { text: "Delete", class: "is-danger" }, - x: { text: "Abort", class: "is-info" } - }, - }); - if (response === "delete") { - logc("Delete user", id, user.name); - delete_user(id); - } + function init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) { + const parent_component = current_component; + set_current_component(component); + const $$ = component.$$ = { + fragment: null, + ctx: null, + // state + props, + update: noop, + not_equal, + bound: blank_object(), + // lifecycle + on_mount: [], + on_destroy: [], + on_disconnect: [], + before_update: [], + after_update: [], + context: new Map(parent_component ? parent_component.$$.context : options.context || []), + // everything else + callbacks: blank_object(), + dirty, + skip_bound: false, + root: options.target || parent_component.$$.root + }; + append_styles && append_styles($$.root); + let ready = false; + $$.ctx = instance + ? instance(component, options.props || {}, (i, ret, ...rest) => { + const value = rest.length ? rest[0] : ret; + if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) { + if (!$$.skip_bound && $$.bound[i]) + $$.bound[i](value); + if (ready) + make_dirty(component, i); } - }, create("i", { class: "fas fa-trash-alt" }))); - })); + return ret; + }) + : []; + $$.update(); + ready = true; + run_all($$.before_update); + // `false` as a special case of no DOM component + $$.fragment = create_fragment ? create_fragment($$.ctx) : false; + if (options.target) { + if (options.hydrate) { + const nodes = children(options.target); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + $$.fragment && $$.fragment.l(nodes); + nodes.forEach(detach); + } + else { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + $$.fragment && $$.fragment.c(); + } + if (options.intro) + transition_in(component.$$.fragment); + mount_component(component, options.target, options.anchor, options.customElement); + flush(); + } + set_current_component(parent_component); } - function delete_user(user_id) { - if (Global.user_list[user_id]) { - delete Global.user_list[user_id]; - save(); - SseEvent.UserCacheChanged.invoke(); + /** + * Base class for Svelte components. Used when dev=false. + */ + class SvelteComponent { + $destroy() { + destroy_component(this, 1); + this.$destroy = noop; + } + $on(type, callback) { + const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = [])); + callbacks.push(callback); + return () => { + const index = callbacks.indexOf(callback); + if (index !== -1) + callbacks.splice(index, 1); + }; + } + $set($$props) { + if (this.$$set && !is_empty($$props)) { + this.$$.skip_bound = true; + this.$$set($$props); + this.$$.skip_bound = false; + } } } - function noop() { } - function run(fn) { - return fn(); - } - function blank_object() { - return Object.create(null); - } - function run_all(fns) { - fns.forEach(run); - } - function is_function(thing) { - return typeof thing === 'function'; - } - function safe_not_equal(a, b) { - return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function'); - } - function is_empty(obj) { - return Object.keys(obj).length === 0; - } - function append(target, node) { - target.appendChild(node); - } - function append_styles(target, style_sheet_id, styles) { - const append_styles_to = get_root_for_style(target); - if (!append_styles_to.getElementById(style_sheet_id)) { - const style = element('style'); - style.id = style_sheet_id; - style.textContent = styles; - append_stylesheet(append_styles_to, style); + class SessionCache { + constructor(prefix) { + this.prefix = prefix; + if (prefix === undefined) + throw Error("Prefix must be set. If you don't want a prefix, explicitely pass ''."); + } + get(key) { + const item = sessionStorage.getItem(this.prefix + key); + if (item === null) + return undefined; + return JSON.parse(item); + } + set(key, value) { + sessionStorage.setItem(this.prefix + key, JSON.stringify(value)); } } - function get_root_for_style(node) { - if (!node) - return document; - const root = node.getRootNode ? node.getRootNode() : node.ownerDocument; - if (root.host) { - return root; + + new SessionCache("beast"); + async function get_bookmarks(username, page, count) { + try { + const data_str = await fetch2(`https://bsaber.com/wp-json/bsaber-api/songs/?bookmarked_by=${username}&page=${page}&count=${count}`); + const data = JSON.parse(data_str); + return data; + } + catch (e) { + return undefined; } - return document; } - function append_stylesheet(node, style) { - append(node.head || node, style); + + class Limiter { + constructor() { + this.ratelimit_reset = undefined; + this.ratelimit_remaining = undefined; + } + async wait() { + const now = unix_timestamp(); + if (this.ratelimit_reset === undefined || now > this.ratelimit_reset) { + this.ratelimit_reset = undefined; + this.ratelimit_remaining = undefined; + return; + } + if (this.ratelimit_remaining === 0) { + const sleepTime = (this.ratelimit_reset - now); + console.log(`Waiting for cloudflare rate limiter... ${sleepTime}sec`); + await sleep(sleepTime * 1000); + this.ratelimit_remaining = this.ratelimit_limit; + this.ratelimit_reset = undefined; + } + } + setLimitData(remaining, reset, limit) { + this.ratelimit_remaining = remaining; + this.ratelimit_reset = reset; + this.ratelimit_limit = limit; + } } - function insert(target, node, anchor) { - target.insertBefore(node, anchor || null); + async function sleep(timeout) { + return new Promise(resolve => setTimeout(resolve, timeout)); } - function detach(node) { - node.parentNode.removeChild(node); + function unix_timestamp() { + return Math.round((new Date()).getTime() / 1000); } - function destroy_each(iterations, detaching) { - for (let i = 0; i < iterations.length; i += 1) { - if (iterations[i]) - iterations[i].d(detaching); + + const api_cache = new SessionCache("saver"); + async function get_data_by_hash(song_hash) { + const cached_data = api_cache.get(song_hash); + if (cached_data !== undefined) + return cached_data; + try { + const data_str = await fetch2(`https://api.beatsaver.com/maps/hash/${song_hash}`); + const data = JSON.parse(data_str); + api_cache.set(song_hash, data); + return data; + } + catch (err) { + logc("Failed to download song data", err); + return undefined; } } - function element(name) { - return document.createElement(name); - } - function text(data) { - return document.createTextNode(data); - } - function space() { - return text(' '); - } - function listen(node, event, handler, options) { - node.addEventListener(event, handler, options); - return () => node.removeEventListener(event, handler, options); - } - function attr(node, attribute, value) { - if (value == null) - node.removeAttribute(attribute); - else if (node.getAttribute(attribute) !== value) - node.setAttribute(attribute, value); - } - function children(element) { - return Array.from(element.childNodes); - } - function select_option(select, value) { - for (let i = 0; i < select.options.length; i += 1) { - const option = select.options[i]; - if (option.__value === value) { - option.selected = true; + + async function oneclick_install(song_key) { + const lastCheck = localStorage.getItem("oneclick-prompt"); + const prompt = !lastCheck || + new Date(lastCheck).getTime() + (1000 * 60 * 60 * 24 * 31) < new Date().getTime(); + if (prompt) { + localStorage.setItem("oneclick-prompt", new Date().getTime().toString()); + const resp = await show_modal({ + buttons: { + install: { text: "Get ModAssistant Installer", class: "is-info" }, + done: { text: "OK, now leave me alone", class: "is-success" }, + }, + text: "OneClick™ requires any current ModInstaller tool with the OneClick™ feature enabled.\nMake sure you have one installed before proceeding.", + }); + if (resp === "install") { + window.open("https://github.com/Assistant/ModAssistant/releases"); return; } } + console.log("Downloading: ", song_key); + window.location.assign(`beatsaver://${song_key}`); } - function select_value(select) { - const selected_option = select.querySelector(':checked') || select.options[0]; - return selected_option && selected_option.__value; + function song_equals(a, b) { + if (a === b) + return true; + if (a === undefined || b === undefined) + return false; + return (a.accuracy === b.accuracy && + a.pp === b.pp && + a.score === b.score && + a.time === b.time && + array_equals(a.mods, b.mods)); } - function toggle_class(element, name, toggle) { - element.classList[toggle ? 'add' : 'remove'](name); + function array_equals(a, b) { + if (a === b) + return true; + if (a === undefined || b === undefined) + return false; + if (a.length !== b.length) + return false; + for (let i = 0; i < a.length; i++) { + if (a[i] !== b[i]) + return false; + } + return true; } - - let current_component; - function set_current_component(component) { - current_component = component; + function parse_mods(mods) { + if (!mods) + return undefined; + const modarr = mods.split(/,/g); + if (modarr.length === 0) + return undefined; + return modarr; } - const dirty_components = []; - const binding_callbacks = []; - const render_callbacks = []; - const flush_callbacks = []; - const resolved_promise = Promise.resolve(); - let update_scheduled = false; - function schedule_update() { - if (!update_scheduled) { - update_scheduled = true; - resolved_promise.then(flush); + const SCORESABER_LINK = "https://new.scoresaber.com/api"; + const API_LIMITER = new Limiter(); + async function get_user_recent_songs_dynamic(user_id, page) { + logc(`Fetching user ${user_id} page ${page}`); + return get_user_recent_songs_new_api_wrap(user_id, page); + } + async function get_user_recent_songs_new_api_wrap(user_id, page) { + const recent_songs = await get_user_recent_songs(user_id, page); + if (!recent_songs) { + return { + meta: { was_last_page: true }, + songs: [] + }; } + return { + meta: { + was_last_page: recent_songs.scores.length < 8 + }, + songs: recent_songs.scores.map(s => [String(s.leaderboardId), { + time: s.timeSet, + pp: s.pp, + accuracy: s.maxScore !== 0 ? round2((s.unmodififiedScore / s.maxScore) * 100) : undefined, + score: s.score, + mods: parse_mods(s.mods) + }]) + }; } - function add_render_callback(fn) { - render_callbacks.push(fn); + async function get_user_recent_songs(user_id, page) { + const req = await auto_fetch_retry(`${SCORESABER_LINK}/player/${user_id}/scores/recent/${page}`); + if (req.status === 404) { + return null; + } + const data = await req.json(); + return sanitize_song_ids(data); } - let flushing = false; - const seen_callbacks = new Set(); - function flush() { - if (flushing) - return; - flushing = true; - do { - // first, call beforeUpdate functions - // and update components - for (let i = 0; i < dirty_components.length; i += 1) { - const component = dirty_components[i]; - set_current_component(component); - update(component.$$); + async function get_user_info_basic(user_id) { + const req = await auto_fetch_retry(`${SCORESABER_LINK}/player/${user_id}/basic`); + const data = await req.json(); + return sanitize_player_ids(data); + } + async function auto_fetch_retry(url) { + const MAX_RETRIES = 20; + const SLEEP_WAIT = 5000; + for (let retries = MAX_RETRIES; retries >= 0; retries--) { + await API_LIMITER.wait(); + const response = await fetch(url); + const remaining = Number(response.headers.get("x-ratelimit-remaining")); + const reset = Number(response.headers.get("x-ratelimit-reset")); + const limit = Number(response.headers.get("x-ratelimit-limit")); + API_LIMITER.setLimitData(remaining, reset, limit); + if (response.status === 429) { + await sleep(SLEEP_WAIT); } - set_current_component(null); - dirty_components.length = 0; - while (binding_callbacks.length) - binding_callbacks.pop()(); - // then, once components are updated, call - // afterUpdate functions. This may cause - // subsequent updates... - for (let i = 0; i < render_callbacks.length; i += 1) { - const callback = render_callbacks[i]; - if (!seen_callbacks.has(callback)) { - // ...so guard against infinite loops - seen_callbacks.add(callback); - callback(); - } + else { + return response; } - render_callbacks.length = 0; - } while (dirty_components.length); - while (flush_callbacks.length) { - flush_callbacks.pop()(); } - update_scheduled = false; - flushing = false; - seen_callbacks.clear(); + throw new Error("Can't fetch data from new.scoresaber."); } - function update($$) { - if ($$.fragment !== null) { - $$.update(); - run_all($$.before_update); - const dirty = $$.dirty; - $$.dirty = [-1]; - $$.fragment && $$.fragment.p($$.ctx, dirty); - $$.after_update.forEach(add_render_callback); - } + function sanitize_player_ids(data) { + data.playerInfo.playerId = String(data.playerInfo.playerId); + return data; } - const outroing = new Set(); - let outros; - function group_outros() { - outros = { - r: 0, - c: [], - p: outros // parent group - }; + function sanitize_song_ids(data) { + for (const s of data.scores) { + s.scoreId = String(s.scoreId); + s.leaderboardId = String(s.leaderboardId); + s.playerId = String(s.playerId); + } + return data; } - function check_outros() { - if (!outros.r) { - run_all(outros.c); + + async function fetch_user(user_id, force = false) { + var _a, _b; + let user = Global.user_list[user_id]; + if (!user) { + user = { + name: "User" + user_id, + songs: {} + }; + Global.user_list[user_id] = user; } - outros = outros.p; + let page_max = undefined; + let user_name = user.name; + let updated = false; + SseEvent.StatusInfo.invoke({ text: `Fetching user ${user_name}` }); + if (get_use_new_ss_api()) { + const user_data = await get_user_info_basic(user_id); + user_name = user_data.playerInfo.playerName; + } + for (let page = 1;; page++) { + SseEvent.StatusInfo.invoke({ text: `Updating user ${user_name} page ${page}/${(page_max !== null && page_max !== void 0 ? page_max : "?")}` }); + const recent_songs = await get_user_recent_songs_dynamic(user_id, page); + const { has_old_entry, has_updated } = process_user_page(recent_songs.songs, user); + updated = updated || has_updated; + page_max = (_a = recent_songs.meta.max_pages) !== null && _a !== void 0 ? _a : page_max; + user_name = (_b = recent_songs.meta.user_name) !== null && _b !== void 0 ? _b : user_name; + if ((!force && has_old_entry) || recent_songs.meta.was_last_page) { + break; + } + } + user.name = user_name !== null && user_name !== void 0 ? user_name : user.name; + if (updated) { + save(); + } + SseEvent.StatusInfo.invoke({ text: `User ${user_name} updated` }); + SseEvent.UserCacheChanged.invoke(); } - function transition_in(block, local) { - if (block && block.i) { - outroing.delete(block); - block.i(local); + async function fetch_all(force = false) { + const users = Object.keys(Global.user_list); + for (const user of users) { + await fetch_user(user, force); } + SseEvent.StatusInfo.invoke({ text: `All users updated` }); } - function transition_out(block, local, detach, callback) { - if (block && block.o) { - if (outroing.has(block)) - return; - outroing.add(block); - outros.c.push(() => { - outroing.delete(block); - if (callback) { - if (detach) - block.d(1); - callback(); - } - }); - block.o(local); - } - } - function create_component(block) { - block && block.c(); - } - function mount_component(component, target, anchor, customElement) { - const { fragment, on_mount, on_destroy, after_update } = component.$$; - fragment && fragment.m(target, anchor); - if (!customElement) { - // onMount happens before the initial afterUpdate - add_render_callback(() => { - const new_on_destroy = on_mount.map(run).filter(is_function); - if (on_destroy) { - on_destroy.push(...new_on_destroy); - } - else { - // Edge case - component was destroyed immediately, - // most likely as a result of a binding initialising - run_all(new_on_destroy); - } - component.$$.on_mount = []; - }); - } - after_update.forEach(add_render_callback); - } - function destroy_component(component, detaching) { - const $$ = component.$$; - if ($$.fragment !== null) { - run_all($$.on_destroy); - $$.fragment && $$.fragment.d(detaching); - // TODO null out other refs, including component.$$ (but need to - // preserve final state?) - $$.on_destroy = $$.fragment = null; - $$.ctx = []; - } - } - function make_dirty(component, i) { - if (component.$$.dirty[0] === -1) { - dirty_components.push(component); - schedule_update(); - component.$$.dirty.fill(0); - } - component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31)); - } - function init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) { - const parent_component = current_component; - set_current_component(component); - const $$ = component.$$ = { - fragment: null, - ctx: null, - // state - props, - update: noop, - not_equal, - bound: blank_object(), - // lifecycle - on_mount: [], - on_destroy: [], - on_disconnect: [], - before_update: [], - after_update: [], - context: new Map(parent_component ? parent_component.$$.context : options.context || []), - // everything else - callbacks: blank_object(), - dirty, - skip_bound: false, - root: options.target || parent_component.$$.root - }; - append_styles && append_styles($$.root); - let ready = false; - $$.ctx = instance - ? instance(component, options.props || {}, (i, ret, ...rest) => { - const value = rest.length ? rest[0] : ret; - if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) { - if (!$$.skip_bound && $$.bound[i]) - $$.bound[i](value); - if (ready) - make_dirty(component, i); - } - return ret; - }) - : []; - $$.update(); - ready = true; - run_all($$.before_update); - // `false` as a special case of no DOM component - $$.fragment = create_fragment ? create_fragment($$.ctx) : false; - if (options.target) { - if (options.hydrate) { - const nodes = children(options.target); - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - $$.fragment && $$.fragment.l(nodes); - nodes.forEach(detach); + function process_user_page(songs, user) { + let has_old_entry = false; + let has_updated = false; + for (const [song_id, song] of songs) { + const song_old = user.songs[song_id]; + if (!song_old || !song_equals(song_old, song)) { + logc("Updated: ", song_old, song); + has_updated = true; } else { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - $$.fragment && $$.fragment.c(); - } - if (options.intro) - transition_in(component.$$.fragment); - mount_component(component, options.target, options.anchor, options.customElement); - flush(); - } - set_current_component(parent_component); - } - /** - * Base class for Svelte components. Used when dev=false. - */ - class SvelteComponent { - $destroy() { - destroy_component(this, 1); - this.$destroy = noop; - } - $on(type, callback) { - const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = [])); - callbacks.push(callback); - return () => { - const index = callbacks.indexOf(callback); - if (index !== -1) - callbacks.splice(index, 1); - }; - } - $set($$props) { - if (this.$$set && !is_empty($$props)) { - this.$$.skip_bound = true; - this.$$set($$props); - this.$$.skip_bound = false; + logc("Old found: ", song); + has_old_entry = true; } + user.songs[song_id] = song; } + return { has_old_entry, has_updated }; } /* src/components/QuickButton.svelte generated by Svelte v3.41.0 */ @@ -1649,819 +1561,161 @@ const song_info = yield get_data_by_hash(song_hash); - if (song_info === undefined) { - failed_to_download(); - throw new Error("song_info is undefined"); - } - - return song_info; - }); - } - - function reset_download_visual() { - button.classList.remove("button_success"); - button.classList.remove("button_error"); - } - - function failed_to_download() { - button.classList.add("button_error"); - } - - function ok_after_download() { - button.classList.add("button_success"); - } - - function onclick() { - return __awaiter(this, void 0, void 0, function* () { - if (preview) return; - - try { - const song_info = yield checked_hash_to_song_info(song_hash); - - if (type === "BS") { - new_page(Global.beatsaver_link + song_info.id); - } else if (type === "OC") { - yield oneclick_install(song_info.id); - ok_after_download(); - } else if (type === "Beast") { - new_page(Global.bsaber_songs_link + song_info.id); - } else if (type === "BeastBook") { - new_page(Global.bsaber_songs_link + song_info.id); - } else if (type === "Preview") { - new_page("https://skystudioapps.com/bs-viewer/?id=" + song_info.id); - } else if (type === "BSR") { - $$invalidate(4, txtDummyNode.value = `!bsr ${song_info.id}`, txtDummyNode); - txtDummyNode.select(); - txtDummyNode.setSelectionRange(0, 99999); - document.execCommand("copy"); - ok_after_download(); - } - } catch(err) { - console.log("Failed QuickAction", song_hash, err); - failed_to_download(); - } - }); - } - - function input_binding($$value) { - binding_callbacks[$$value ? 'unshift' : 'push'](() => { - txtDummyNode = $$value; - $$invalidate(4, txtDummyNode); - }); - } - - function div_binding($$value) { - binding_callbacks[$$value ? 'unshift' : 'push'](() => { - button = $$value; - $$invalidate(3, button); - }); - } - - $$self.$$set = $$props => { - if ('song_hash' in $$props) $$invalidate(10, song_hash = $$props.song_hash); - if ('type' in $$props) $$invalidate(0, type = $$props.type); - if ('size' in $$props) $$invalidate(1, size = $$props.size); - if ('preview' in $$props) $$invalidate(2, preview = $$props.preview); - if ('page' in $$props) $$invalidate(11, page = $$props.page); - }; - - $$self.$$.update = () => { - if ($$self.$$.dirty & /*preview, song_hash*/ 1028) { - $$invalidate(8, disabled = !preview && song_hash === undefined - ? "disabled" - : undefined); - } - - if ($$self.$$.dirty & /*preview, page, type*/ 2053) { - $$invalidate(7, display = !preview && page !== undefined - ? `display: var(--sse-show-${page}-${type}, inline-flex);` - : ""); - } - - if ($$self.$$.dirty & /*type, preview, song_hash*/ 1029) { - { - $$invalidate(5, color = ""); - $$invalidate(6, tooltip = BMButtonHelp[type].tip); - - if (type === "BeastBook" && !preview) { - const bookmarked = song_hash === undefined - ? false - : check_bsaber_bookmark(song_hash); - - $$invalidate(5, color = bookmarked ? "is-success" : "is-danger"); - - $$invalidate(6, tooltip = bookmarked - ? "Bookmarked on BeastSaber" - : "Not Bookmarked on BeastSaber"); - } - } - } - }; - - return [ - type, - size, - preview, - button, - txtDummyNode, - color, - tooltip, - display, - disabled, - onclick, - song_hash, - page, - input_binding, - div_binding - ]; - } - - class QuickButton extends SvelteComponent { - constructor(options) { - super(); - - init( - this, - options, - instance$1, - create_fragment$1, - safe_not_equal, - { - song_hash: 10, - type: 0, - size: 1, - preview: 2, - page: 11 - }, - add_css - ); - } - } - - const PAGE$2 = "songlist"; - function setup_links_songlist() { - if (!is_songlist_page()) { - return; - } - const song_table = check(document.querySelector("table.ranking.songs")); - const song_table_header = check(song_table.querySelector("thead tr")); - for (const btn of BMButton) { - into(song_table_header, create("th", { - class: "compact", - style: bmvar(PAGE$2, btn, "table-cell"), - }, BMButtonHelp[btn].short)); - } - const song_rows = song_table.querySelectorAll("tbody tr"); - for (const row of song_rows) { - const song_hash = get_song_hash_from_row(row); - for (const btn of BMButton) { - into(row, create("th", { class: "compact", style: bmvar(PAGE$2, btn, "table-cell") }, as_fragment(target => new QuickButton({ - target, - props: { song_hash, size: "medium", type: btn } - })))); - } - } - } - function get_song_hash_from_row(row) { - const image_link = check(row.querySelector("td.song img")).src; - return get_song_hash_from_text(image_link); - } - function setup_extra_filter_checkboxes() { - if (!is_songlist_page()) { - return; - } - setup_duplicates_filter_checkbox(); - } - function setup_duplicates_filter_checkbox() { - var _a, _b; - const checked = should_hide_duplicate_songs(); - const duplicates_filter = create("label", { class: "checkbox" }, create("input", { - id: "duplicates", - type: "checkbox", - checked: checked, - onclick() { - set_hide_duplicate_songs_filter(!checked); - window.location.reload(); - } - })); - duplicates_filter.appendChild(document.createTextNode(" Hide duplicate songs ")); - const ranked_filter = check((_a = document.querySelector("input#ranked")) === null || _a === void 0 ? void 0 : _a.parentElement); - (_b = ranked_filter.parentNode) === null || _b === void 0 ? void 0 : _b.insertBefore(duplicates_filter, ranked_filter.nextSibling); - } - function apply_extra_filters() { - if (!is_songlist_page()) { - return; - } - if (should_hide_duplicate_songs()) { - hide_duplicate_songs(); - } - } - function hide_duplicate_songs() { - const song_table = check(document.querySelector("table.ranking.songs tbody")); - const song_rows = check(song_table.querySelectorAll("tr")); - const hashes = new Set(); - for (const row of song_rows) { - const song_hash = check(get_song_hash_from_row(row)); - if (hashes.has(song_hash)) { - song_table.removeChild(row); - } - else { - hashes.add(song_hash); - } - } - } - function should_hide_duplicate_songs() { - return localStorage.getItem("hide_songlist_duplicates") == "true"; - } - function set_hide_duplicate_songs_filter(filter) { - localStorage.setItem("hide_songlist_duplicates", JSON.stringify(filter)); - } - function is_songlist_page() { - return location.pathname == "/"; - } - - const api_cache = new SessionCache("beast"); - async function get_data(song_key) { - const cached_data = api_cache.get(song_key); - if (cached_data !== undefined) - return cached_data; - try { - const data_str = await fetch2(`https://bsaber.com/wp-json/bsaber-api/songs/${song_key}/ratings`); - const data = JSON.parse(data_str); - api_cache.set(song_key, data); - return data; - } - catch (e) { - return undefined; - } - } - async function get_bookmarks(username, page, count) { - try { - const data_str = await fetch2(`https://bsaber.com/wp-json/bsaber-api/songs/?bookmarked_by=${username}&page=${page}&count=${count}`); - const data = JSON.parse(data_str); - return data; - } - catch (e) { - return undefined; - } - } - - class Lazy { - constructor(generator) { - this.generator = generator; - } - get() { - if (this.generator !== undefined) { - this.value = this.generator(); - this.generator = undefined; - } - return this.value; - } - } - - const PAGE$1 = "song"; - const shared = new Lazy(() => { - var _a; - let details_box = check(document.querySelector(".title.is-5")); - details_box = check(details_box.parentElement.parentElement.parentElement); - const song_hash = get_song_hash_from_text(details_box.innerHTML); - const diff_name = (_a = document.querySelector(`div.tabs a.selected`)) === null || _a === void 0 ? void 0 : _a.innerText; - return { song_hash, details_box, diff_name }; - }); - function setup_song_filter_tabs() { - if (!is_song_leaderboard_page()) { - return; - } - const tab_list_content = check(document.querySelector(".tabs > ul")); - function load_friends() { - let score_table = check(document.querySelector(".ranking .global > tbody")); - Global.song_table_backup = score_table; - const table = check(score_table.parentNode); - table.removeChild(score_table); - score_table = table.appendChild(create("tbody")); - const song_id = Global.leaderboard_reg.exec(window.location.pathname)[1]; - const elements = []; - for (const [user_id, user] of Object.entries(Global.user_list)) { - const song = user.songs[song_id]; - if (!song) - continue; - elements.push([song, generate_song_table_row(user_id, user, song)]); - } - elements.sort((a, b) => { const [sa, sb] = get_song_compare_value(a[0], b[0]); return sb - sa; }); - elements.forEach(x => score_table.appendChild(x[1])); - add_percentage(); - } - function load_all() { - if (!Global.song_table_backup) { - return; - } - let score_table = check(document.querySelector(".ranking .global > tbody")); - const table = check(score_table.parentNode); - table.removeChild(score_table); - score_table = table.appendChild(Global.song_table_backup); - Global.song_table_backup = undefined; - add_percentage(); - } - tab_list_content.appendChild(generate_tab("All Scores", "all_scores_tab", load_all, true, true)); - tab_list_content.appendChild(generate_tab("Friends", "friends_tab", load_friends, false, false)); - } - function setup_dl_link_leaderboard() { - if (!is_song_leaderboard_page()) { - return; - } - const { song_hash, details_box } = shared.get(); - const tool_strip = create("div", { - id: "leaderboard_tool_strip", - style: { - marginTop: "1em" - } - }); - for (const btn of BMButton) { - new QuickButton({ - target: tool_strip, - props: { song_hash, size: "large", type: btn, page: PAGE$1 } - }); - } - details_box.appendChild(tool_strip); - const song_warning = create("div"); - details_box.appendChild(song_warning); - const box_style = { class: "box", style: { display: "flex", flexDirection: "column", alignItems: "end", padding: "0.5em 1em" } }; - const beatsaver_box = create("div", box_style, create("b", {}, "BeatSaver"), create("span", { class: "icon" }, create("i", { class: "fas fa-spinner fa-pulse" }))); - const beastsaber_box = create("div", box_style, create("b", {}, "BeastSaber"), create("span", { class: "icon" }, create("i", { class: "fas fa-spinner fa-pulse" }))); - const column_style = { class: "column", style: { padding: "0 0.75em" } }; - details_box.appendChild(create("div", { - class: "columns", - style: { - marginTop: "1em" - } - }, create("div", column_style, beatsaver_box), create("div", column_style, beastsaber_box))); - if (!song_hash) - return; - (async () => { - const data = await get_data_by_hash(song_hash); - if (!data) - return; - show_song_warning(song_warning, song_hash, data); - show_beatsaver_song_data(beatsaver_box, data); - const data2 = await get_data(data.id); - if (!data2) - return; - show_beastsaber_song_data(beastsaber_box, data2); - })(); - } - function show_song_warning(elem, song_hash, data) { - const contains_version = data.versions.some(x => x.hash === song_hash); - if (!contains_version) { - const new_song_hash = data.versions[data.versions.length - 1].hash; - const { diff_name } = shared.get(); - intor(elem, create("div", { - style: { marginTop: "1em", cursor: "pointer" }, - class: "notification is-warning", - onclick: async () => { - const bs2ss = await get_scoresaber_data_by_hash(new_song_hash, diff_name); - if (bs2ss === undefined) - return; - new_page(`https://scoresaber.com/leaderboard/${bs2ss.uid}`); - }, - }, create("i", { class: "fas fa-exclamation-triangle" }), create("span", { style: { marginLeft: "0.25em" } }, "A newer version of this song exists on BeatSaver"))); - } - } - function show_beatsaver_song_data(elem, data) { - intor(elem, create("div", { title: "Downloads" }, `${data.stats.downloads} 💾`), create("div", { title: "Upvotes" }, `${data.stats.upvotes} 👍`), create("div", { title: "Downvotes" }, `${data.stats.downvotes} 👎`), create("div", { title: "Beatmap Rating" }, `${(data.stats.score * 100).toFixed(2)}% 💯`), create("div", { title: "Beatmap Duration" }, `${number_to_timespan(data.metadata.duration)} ⏱`)); - } - function show_beastsaber_song_data(elem, data) { - intor(elem, create("div", { title: "Fun Factor" }, `${data.average_ratings.fun_factor} 😃`), create("div", { title: "Rhythm" }, `${data.average_ratings.rhythm} 🎶`), create("div", { title: "Flow" }, `${data.average_ratings.flow} 🌊`), create("div", { title: "Pattern Quality" }, `${data.average_ratings.pattern_quality} 💠`), create("div", { title: "Readability" }, `${data.average_ratings.readability} 👓`), create("div", { title: "Level Quality" }, `${data.average_ratings.level_quality} ✔️`)); - } - function generate_song_table_row(user_id, user, song) { - return create("tr", {}, create("td", { class: "picture" }), create("td", { class: "rank" }, "-"), create("td", { class: "player" }, generate_song_table_player(user_id, user)), create("td", { class: "score" }, song.score !== undefined ? format_en(song.score, 0) : "-"), create("td", { class: "timeset" }, moment(song.time).fromNow()), create("td", { class: "mods" }, song.mods !== undefined ? song.mods.toString() : "-"), create("td", { class: "percentage" }, song.accuracy ? (song.accuracy.toString() + "%") : "-"), create("td", { class: "pp" }, create("span", { class: "scoreTop ppValue" }, format_en(song.pp)), create("span", { class: "scoreTop ppLabel" }, "pp"))); - } - function generate_song_table_player(user_id, user) { - return create("a", { href: `${Global.scoresaber_link}/u/${user_id}` }, user.name); - } - function generate_tab(title, css_id, action, is_active, has_offset) { - const tabClass = `filter_tab ${toggled_class(is_active, "is-active")} ${toggled_class(has_offset, "offset_tab")}`; - return create("li", { - id: css_id, - class: tabClass, - }, create("a", { - class: "has-text-info", - onclick: () => { - document.querySelectorAll(".tabs > ul .filter_tab").forEach(x => x.classList.remove("is-active")); - check(document.getElementById(css_id)).classList.add("is-active"); - if (action) - action(); - } - }, title)); - } - function highlight_user() { - const home_user = get_home_user(); - if (!home_user) { - return; - } - const element = document.querySelector(`table.ranking.global a[href='/u/${home_user.id}']`); - if (element != null) { - element.parentElement.parentElement.style.backgroundColor = "var(--color-highlight)"; - } - } - function add_percentage() { - if (!is_song_leaderboard_page()) { - return; - } - const { song_hash, diff_name } = shared.get(); - if (!song_hash) { - return; - } - (async () => { - const data = await get_data_by_hash(song_hash); - if (!data) - return; - if (!diff_name) - return; - const version = data.versions.find((v) => v.hash === song_hash.toLowerCase()); - if (!diff_name || !version) - return; - const notes = get_notes_count(diff_name, "Standard", version); - if (notes < 0) - return; - const max_score = calculate_max_score(notes); - const user_scores = document.querySelectorAll("table.ranking.global tbody > tr"); - for (const score_row of user_scores) { - const percentage_column = check(score_row.querySelector("td.percentage")); - const percentage_value = percentage_column.innerText; - if (percentage_value === "-") { - const score = check(score_row.querySelector("td.score")).innerText; - const score_num = number_invariant(score); - const calculated_percentage = (100 * score_num / max_score).toFixed(2); - percentage_column.innerText = calculated_percentage + "%"; - } - } - })(); - } - - const PAGE = "user"; - function setup_dl_link_user_site() { - if (!is_user_page()) { - return; - } - const table = check(document.querySelector(".ranking.songs")); - const table_row = table.querySelectorAll(".table-item"); - for (const row of table_row) { - const image_link = check(row.querySelector(".song-container img")).src; - const song_hash = get_song_hash_from_text(image_link); - const col = create("div", { - class: "svelte-hij8c" - }); - into(row, col); - for (const btn of BMButton) { - into(col, create("span", { class: "compact", style: bmvar(PAGE, btn, "table-cell") }, as_fragment(target => new QuickButton({ - target, - props: { song_hash, size: "medium", type: btn } - })))); - } - } - } - function update_wide_table_css() { - if (!is_user_page()) { - return; - } - const table = check(document.querySelector(".ranking.songs")); - table.classList.toggle("wide_song_table", get_wide_table()); - } - - function get_state(elem) { - return !elem.classList.contains(elem.view_class); - } - function set_state(elem, state) { - if (state) { - elem.classList.remove(elem.view_class); - } - else { - elem.classList.add(elem.view_class); - } - } - function button(opt) { - var _a, _b; - const btn = create("div", { - class: "button" - }, opt.text); - btn.view_class = `is-${(_a = opt.type) !== null && _a !== void 0 ? _a : "primary"}`; - btn.on = () => { - var _a; - set_state(btn, true); - (_a = opt.onclick) === null || _a === void 0 ? void 0 : _a.call(btn, true); - }; - btn.off = () => { - var _a; - set_state(btn, false); - (_a = opt.onclick) === null || _a === void 0 ? void 0 : _a.call(btn, false); - }; - btn.toggle = () => { - var _a; - const state = !get_state(btn); - set_state(btn, state); - (_a = opt.onclick) === null || _a === void 0 ? void 0 : _a.call(btn, state); - }; - btn.onclick = () => { - if (btn.getAttribute("disabled") == null) { - btn.toggle(); - } - }; - set_state(btn, (_b = opt.default) !== null && _b !== void 0 ? _b : false); - return btn; - } - - let chart; - let chart_elem; - let chart_button; - function setup_pp_graph() { - if (!is_user_page()) { - return; - } - chart_elem = create("canvas"); - const chart_container = create("div", { - style: { - width: "100%", - height: "20em", - display: "none", - } - }, chart_elem); - insert_compare_display(chart_container); - chart_button = button({ - default: false, - text: "Show pp Graph", - onclick(active) { - if (!chart_elem) - return; - this.innerText = (active ? "Hide" : "Show") + " pp Graph"; - set_pp_graph_visibility(chart_container, active); - } - }); - insert_compare_feature(chart_button); - update_pp_graph_buttons(); - SseEvent.UserCacheChanged.register(update_pp_graph_buttons); - SseEvent.CompareUserChanged.register(update_pp_graph); - } - async function chartUserData(canvasContext, datasets, labels) { - if (chart !== undefined) { - chart.data = { - labels, - datasets - }; - chart.update(); - return; - } - if (!await load_chart_lib()) - return; - chart = new Chart(canvasContext, { - type: "line", - data: { - labels, - datasets, - }, - options: { - responsive: true, - maintainAspectRatio: false, - elements: { - point: { - radius: 2, - } - }, - tooltips: { - callbacks: { - label: tooltipItem => String(tooltipItem.yLabel), - title: () => "", - } - }, - scales: { - xAxes: [{ - display: false, - }] - } - }, - }); - } - function get_graph_data(user_id) { - const user = Global.user_list[user_id]; - if (user === undefined) - return []; - const data = []; - const data_scaled = []; - Object.values(user.songs) - .filter((song) => song.pp > 0) - .sort((a, b) => b.pp - a.pp) - .forEach((song, index) => { - const pp = song.pp; - data.push(pp); - data_scaled.push(+(pp * Math.pow(Global.pp_weighting_factor, index)).toFixed(2)); - }); - const color = (Number(user_id) % 3600) / 10; - return [{ - label: `${user.name} (song pp)`, - backgroundColor: `hsl(${color}, 100%, 50%)`, - borderColor: `hsl(${color}, 100%, 50%)`, - fill: false, - data, - }, { - label: `${user.name} (weighted pp)`, - backgroundColor: `hsl(${color}, 60%, 25%)`, - borderColor: `hsl(${color}, 60%, 25%)`, - fill: false, - data: data_scaled, - }]; - } - function update_pp_graph() { - if (chart_elem === undefined) - return; - let dataSets = get_graph_data(get_current_user().id); - const compare_user = get_compare_user(); - if (get_current_user().id !== compare_user && compare_user !== undefined) - dataSets = [...dataSets, ...get_graph_data(compare_user)]; - let max = 0; - for (const set of dataSets) { - max = Math.max(max, set.data.length); - } - for (const set of dataSets) { - if (set.data.length < max) { - set.data.length = max; - set.data.fill(0, set.data.length, max); - } - } - const labels = Array(max); - labels.fill("Song", 0, max); - chartUserData(check(chart_elem.getContext("2d")), dataSets, labels); - } - function update_pp_graph_buttons() { - if (!chart_button) { - return; - } - const user = get_current_user(); - if (Global.user_list[user.id] === undefined) { - chart_button.setAttribute("disabled", ""); - chart_button.setAttribute("data-tooltip", "Add the user to your score cache for this feature"); - chart_button.off(); - } - else { - chart_button.removeAttribute("disabled"); - chart_button.removeAttribute("data-tooltip"); - } - } - function set_pp_graph_visibility(elem, active) { - if (active) { - if (!chart) { - update_pp_graph(); - } - elem.style.display = ""; - } - else { - elem.style.display = "none"; - } - } - - const themes = ["Default", "Cerulean", "Cosmo", "Cyborg", "Darkly", "Flatly", - "Journal", "Litera", "Lumen", "Lux", "Materia", "Minty", "Nuclear", "Pulse", - "Sandstone", "Simplex", "Slate", "Solar", "Spacelab", "Superhero", "United", - "Yeti"]; - const dark_themes = ["Cyborg", "Darkly", "Nuclear", "Slate", "Solar", "Superhero"]; - const theme_light = `:root { - --color-ahead: rgb(128, 255, 128); - --color-behind: rgb(255, 128, 128); - --color-highlight: lightgreen; -}`; - const theme_dark = `:root { - --color-ahead: rgb(0, 128, 0); - --color-behind: rgb(128, 0, 0); - --color-highlight: darkgreen; -} -.BS_bg_btn { - background-color: white; -} -/* Reset colors for generic themes */ -span.songBottom.time, span.scoreBottom, span.scoreTop.ppWeightedValue { - color:unset; -} -span.songTop.pp, span.scoreTop.ppValue, span.scoreTop.ppLabel, span.songTop.mapper { - text-shadow: 1px 1px 2px #000; -}`; - function setup$1() { - const style_data = `.compact { - padding-right: 0 !important; - padding-left: 0 !important; - margin-left: 0px !important; - margin-right: 0px !important; - text-align: center !important; -} - -h5 > * { - margin-right: 0.3em; -} + if (song_info === undefined) { + failed_to_download(); + throw new Error("song_info is undefined"); + } -.wide_song_table { - max-width: unset !important; -} + return song_info; + }); + } -#leaderboard_tool_strip > * { - margin-right: 0.5em; -} + function reset_download_visual() { + button.classList.remove("button_success"); + button.classList.remove("button_error"); + } -.offset_tab { - margin-left: auto; -} + function failed_to_download() { + button.classList.add("button_error"); + } -.beatsaver_bg { - background: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200' viewBox='0 0 200 200' version='1.1'%3E%3Cg fill='none' stroke='%23000000' stroke-width='10'%3E %3Cpath d='M 100,7 189,47 100,87 12,47 Z' stroke-linejoin='round'/%3E %3Cpath d='M 189,47 189,155 100,196 12,155 12,47' stroke-linejoin='round'/%3E %3Cpath d='M 100,87 100,196' stroke-linejoin='round'/%3E %3Cpath d='M 26,77 85,106 53,130 Z' stroke-linejoin='round'/%3E %3C/g%3E %3C/svg%3E") no-repeat center/85%; - width: 100%; - height: 100%; -} + function ok_after_download() { + button.classList.add("button_success"); + } -.fas_big { - line-height: 150%; - padding-right: 0.5em; - padding-left: 0.5em; - min-width: 2.25em; - /* Fix for some themes overriding font */ - font-weight: 900; - font-family: "Font Awesome 5 Free"; -} + function onclick() { + return __awaiter(this, void 0, void 0, function* () { + if (preview) return; -.fas_big::before { - font-size: 120%; -} + try { + const song_info = yield checked_hash_to_song_info(song_hash); -[data-tooltip]::before { - visibility: hidden; - background-color: #555; - color: #fff; - border-radius: 6px; - position: absolute; - z-index: 1; - margin-top: -5px; - opacity: 0; - transition: opacity 0.3s; - padding: 0.2em 1em; - content: attr(data-tooltip); - /* Default */ - top: 0; - left: 50%; - right: auto; - bottom: auto; - transform: translate(-50%, -100%); -} -[data-tooltip].has-tooltip-left::before { - top: auto; - right: auto; - bottom: 50%; - left: -11px; - transform: translate(-100%, 50%); -} -[data-tooltip]:hover::before { - visibility: visible; - opacity: 1; -} + if (type === "BS") { + new_page(Global.beatsaver_link + song_info.id); + } else if (type === "OC") { + yield oneclick_install(song_info.id); + ok_after_download(); + } else if (type === "Beast") { + new_page(Global.bsaber_songs_link + song_info.id); + } else if (type === "BeastBook") { + new_page(Global.bsaber_songs_link + song_info.id); + } else if (type === "Preview") { + new_page("https://skystudioapps.com/bs-viewer/?id=" + song_info.id); + } else if (type === "BSR") { + $$invalidate(4, txtDummyNode.value = `!bsr ${song_info.id}`, txtDummyNode); + txtDummyNode.select(); + txtDummyNode.setSelectionRange(0, 99999); + document.execCommand("copy"); + ok_after_download(); + } + } catch(err) { + console.log("Failed QuickAction", song_hash, err); + failed_to_download(); + } + }); + } -@keyframes fill_anim { - 0%{background-position:top;} - 20%{background-position:bottom;} - 80%{background-position:bottom;} - 100%{background-position:top;} -} -.button_error { - background: linear-gradient(to top, red 50%, transparent 50%); - background-size: 100% 200%; - background-position:top; - animation: fill_anim 3s cubic-bezier(.23,1,.32,1) forwards; -} -.button_success { - background: linear-gradient(to top, green 50%, transparent 50%); - background-size: 100% 200%; - background-position:top; - animation: fill_anim 3s cubic-bezier(.23,1,.32,1) forwards; -} + function input_binding($$value) { + binding_callbacks[$$value ? 'unshift' : 'push'](() => { + txtDummyNode = $$value; + $$invalidate(4, txtDummyNode); + }); + } -/* Fix weird tab list offset */ + function div_binding($$value) { + binding_callbacks[$$value ? 'unshift' : 'push'](() => { + button = $$value; + $$invalidate(3, button); + }); + } -.content li { - margin-top: 0; -} + $$self.$$set = $$props => { + if ('song_hash' in $$props) $$invalidate(10, song_hash = $$props.song_hash); + if ('type' in $$props) $$invalidate(0, type = $$props.type); + if ('size' in $$props) $$invalidate(1, size = $$props.size); + if ('preview' in $$props) $$invalidate(2, preview = $$props.preview); + if ('page' in $$props) $$invalidate(11, page = $$props.page); + }; -/* Fix bulma+scoresable dark color */ -/* Theme CSS will be appended and can therefore - * conveniently overwrite those rules. - * This makes them effectively useful for the default - * Light/Dark Themes of ScoreSaber */ + $$self.$$.update = () => { + if ($$self.$$.dirty & /*preview, song_hash*/ 1028) { + $$invalidate(8, disabled = !preview && song_hash === undefined + ? "disabled" + : undefined); + } -.navbar-dropdown, .modal-card-head, .modal-card-foot { - color: var(--textColor, black); - background-color: var(--background, white); - border-color: var(--foreground, #dbdbdb); -} + if ($$self.$$.dirty & /*preview, page, type*/ 2053) { + $$invalidate(7, display = !preview && page !== undefined + ? `display: var(--sse-show-${page}-${type}, inline-flex);` + : ""); + } -.box, .modal-card-body { - color: var(--textColor, black); - background-color: var(--background, white); -} -`; - SSE_addStyle(style_data); - into(document.head, create("link", { rel: "stylesheet", href: "https://cdn.jsdelivr.net/npm/bulma-checkradio/dist/css/bulma-checkradio.min.css" })); + if ($$self.$$.dirty & /*type, preview, song_hash*/ 1029) { + { + $$invalidate(5, color = ""); + $$invalidate(6, tooltip = BMButtonHelp[type].tip); + + if (type === "BeastBook" && !preview) { + const bookmarked = song_hash === undefined + ? false + : check_bsaber_bookmark(song_hash); + + $$invalidate(5, color = bookmarked ? "is-success" : "is-danger"); + + $$invalidate(6, tooltip = bookmarked + ? "Bookmarked on BeastSaber" + : "Not Bookmarked on BeastSaber"); + } + } + } + }; + + return [ + type, + size, + preview, + button, + txtDummyNode, + color, + tooltip, + display, + disabled, + onclick, + song_hash, + page, + input_binding, + div_binding + ]; + } + + class QuickButton extends SvelteComponent { + constructor(options) { + super(); + + init( + this, + options, + instance$1, + create_fragment$1, + safe_not_equal, + { + song_hash: 10, + type: 0, + size: 1, + preview: 2, + page: 11 + }, + add_css + ); + } + } + + function update_wide_table_css() { + if (!is_user_page()) { + return; + } + const table = check(document.querySelector(".ranking.songs")); + table.classList.toggle("wide_song_table", get_wide_table()); } /* src/components/SettingsDialogue.svelte generated by Svelte v3.41.0 */ @@ -3267,7 +2521,7 @@ h5 > * { const cog = create("i", { class: "fas fa-cog" }); into(get_navbar(), create("a", { id: "settings_menu", - class: "navbar-item", + class: Global.header_class, style: { cursor: "pointer", }, @@ -3354,24 +2608,6 @@ h5 > * { } } - async function check_for_updates() { - const current_version = SSE_info.script.version; - const update_check = localStorage.getItem("update_check"); - if (update_check && Number(update_check) >= new Date().getTime()) { - return; - } - const latest_script = await fetch2(`https://raw.githubusercontent.com/Splamy/ScoreSaberEnhanced/master/scoresaber.user.js`); - const latest_version = Global.script_version_reg.exec(latest_script)[1]; - if (current_version !== latest_version) { - SseEvent.addNotification({ msg: "An update is available", type: "warning" }); - } - else { - const now = new Date(); - now.setDate(now.getDate() + 1); - localStorage.setItem("update_check", now.getTime().toString()); - } - } - setup$3(); setup$2(); load(); @@ -3390,40 +2626,40 @@ h5 > * { setup$1(); load_last_theme(); } - let has_loaded_body = false; + let mutated = []; + let added = []; function on_load_body() { - if (document.readyState !== "complete" && document.readyState !== "interactive") { - logc("Body not ready"); - return; + added = []; + mutated + .filter((e) => e.target !== document.head) + .forEach((e) => added = added.concat(Array.from(e.addedNodes).filter(a => a.nodeName !== "#text"))); + if (added.find(e => e.nodeName === "HEADER")) { + logc("Heading added"); + setup_self_button(); + setup(); + update_button_visibility(); + } + mutated = []; + } + let timer_id = null; + function onload() { + try { + on_load_head(); + on_load_body(); + console.log("onload"); } - if (has_loaded_body) { - logc("Already loaded body"); - return; + catch (e) { + console.error(e); } - logc("Loading body"); - setup_dl_link_user_site(); - update_wide_table_css(); - setup_dl_link_leaderboard(); - setup_song_filter_tabs(); - highlight_user(); - add_percentage(); - setup_links_songlist(); - setup_extra_filter_checkboxes(); - apply_extra_filters(); - setup_self_pin_button(); - setup_self_button(); - setup_user_compare(); - setup(); - update_button_visibility(); - setup_pp_graph(); - check_for_updates(); - has_loaded_body = true; } - function onload() { - on_load_head(); - on_load_body(); - } - setInterval(onload, 1000); + const observer = new MutationObserver((mutations) => { + mutated = mutated.concat(mutations); + if (timer_id !== null) { + clearTimeout(timer_id); + } + timer_id = setTimeout(onload, 1000); + }); + observer.observe(document, { childList: true, subtree: true }); })(); //# sourceMappingURL=rollup.js.map diff --git a/src/global.ts b/src/global.ts index c1ace0f..39b3ea5 100644 --- a/src/global.ts +++ b/src/global.ts @@ -24,6 +24,8 @@ export default class Global { public static readonly script_version_reg = /\/\/\s*@version\s+([\d.]+)/; public static readonly user_per_page_global_leaderboard = 50; public static readonly user_per_page_song_leaderboard = 12; + + public static readonly header_class = "svelte-kbfjj1"; /** * This is the exponential factor ScoreSaber is using to weight their scores. */ diff --git a/src/header.ts b/src/header.ts index ec181dd..ad9c43b 100644 --- a/src/header.ts +++ b/src/header.ts @@ -25,24 +25,37 @@ export function setup_self_pin_button(): void { } export function setup_self_button(): void { + let _a, _d, _a_hover = false, _d_hover = false; const home_user = get_home_user() ?? { name: "", id: "0" }; - - into(get_navbar(), - create("div", { class: "navbar-item has-dropdown is-hoverable" }, - create("a", { - id: "home_user", - class: "navbar-item", - href: g.scoresaber_link + "/u/" + home_user.id - }, home_user.name), - create("div", { - id: "home_user_list", - class: "navbar-dropdown" - }) - ) - ); - + into(get_navbar(), _a = create("a", { + id: "home_user", + class: g.header_class, + href: g.scoresaber_link + "/u/" + home_user.id + }, home_user.name, _d = create("div", { + id: "home_user_list", + class: "userMenu " + g.header_class, + style: { + width: "initial" + } + }))); + const _hide = () => (!_a_hover && !_d_hover) ? _d.classList.remove("visible") :0; + _a.addEventListener("mouseenter", () => { + _a_hover = true; + _d.classList.add("visible"); + }); + _d.addEventListener("mouseenter", () => { + _d_hover = true; + _d.classList.add("visible"); + }); + _a.addEventListener("mouseleave", () => { + _a_hover = false; + setTimeout(_hide, 200); + }) + _d.addEventListener("mouseleave", () => { + _d_hover = false; + setTimeout(_hide, 200); + }) update_self_user_list(); - SseEvent.UserCacheChanged.register(update_self_user_list); SseEvent.PinnedUserChanged.register(update_self_button); } @@ -62,7 +75,7 @@ function update_self_user_list(): void { intor(home_user_list_elem, ...Object.entries(g.user_list).map(([id, user]) => { return create("a", { - class: "navbar-item", + class: g.header_class, style: { paddingRight: "1em", flexWrap: "nowrap", diff --git a/src/main.ts b/src/main.ts index 0ef14c2..5664ed4 100644 --- a/src/main.ts +++ b/src/main.ts @@ -26,17 +26,28 @@ function on_load_head() { settings.load_last_theme(); } -let has_loaded_body = false; -function on_load_body(): void { - if (document.readyState !== "complete" && document.readyState !== "interactive") { - log.logc("Body not ready"); - return; - } - if (has_loaded_body) { log.logc("Already loaded body"); return; } - log.logc("Loading body"); +let mutated = []; +let added = []; +//let modified = []; +function on_load_body() { + added = []; + //modified = []; + + mutated + .filter((e) => e.target !== document.head) + .forEach((e) => added = added.concat(Array.from(e.addedNodes).filter(a => a.nodeName !== "#text"))); + + if (added.find(e => e.nodeName === "HEADER")) { + log.logc("Heading added"); + header.setup_self_button(); + settings.setup(); + settings.update_button_visibility(); + } + /* + header.setup_self_pin_button(); page_user.setup_dl_link_user_site(); - //page_user.add_percentage(); + page_user.add_percentage(); page_user.update_wide_table_css(); page_song.setup_dl_link_leaderboard(); page_song.setup_song_filter_tabs(); @@ -45,20 +56,30 @@ function on_load_body(): void { page_songlist.setup_links_songlist(); page_songlist.setup_extra_filter_checkboxes(); page_songlist.apply_extra_filters(); - header.setup_self_pin_button(); - header.setup_self_button(); compare.setup_user_compare(); - settings.setup(); - settings.update_button_visibility(); ppgraph.setup_pp_graph(); updater.check_for_updates(); - - has_loaded_body = true; + */ + mutated = []; } +let timer_id = null; + function onload() { - on_load_head(); - on_load_body(); + try { + on_load_head(); + on_load_body(); + console.log("onload"); + } + catch(e) { console.error(e); } } -setInterval(onload, 1000); +const observer = new MutationObserver((mutations) => { + mutated = mutated.concat(mutations); + + if (timer_id !== null) { + clearTimeout(timer_id); + } + timer_id = setTimeout(onload, 1000); +}); +observer.observe(document, {childList: true, subtree: true}); diff --git a/src/settings.ts b/src/settings.ts index dafd3a9..073d45e 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -17,7 +17,7 @@ export function setup(): void { into(env.get_navbar(), create("a", { id: "settings_menu", - class: "navbar-item", + class: g.header_class, style: { cursor: "pointer", }, From 6b43c524a57cf6e8c0eaacde5a51d062dc32d36e Mon Sep 17 00:00:00 2001 From: Chris Allan Date: Tue, 30 Nov 2021 17:03:49 -0800 Subject: [PATCH 03/16] Song page load --- scoresaber.user.js | 1478 +++++++++++++++++++++++++++----------------- src/main.ts | 14 +- src/pages/song.ts | 2 + src/util/lazy.ts | 6 +- 4 files changed, 921 insertions(+), 579 deletions(-) diff --git a/scoresaber.user.js b/scoresaber.user.js index a552077..c799ee8 100644 --- a/scoresaber.user.js +++ b/scoresaber.user.js @@ -259,6 +259,9 @@ function is_user_page() { return window.location.href.toLowerCase().startsWith(Global.scoresaber_link + "/u/"); } + function is_song_leaderboard_page() { + return window.location.href.toLowerCase().startsWith(Global.scoresaber_link + "/leaderboard/"); + } function get_home_user() { if (Global._home_user) { return Global._home_user; @@ -340,6 +343,29 @@ return bookmarks.includes(song_hash.toLowerCase()); } + function format_en(num, digits) { + if (digits === undefined) + digits = 2; + return num.toLocaleString("en", { minimumFractionDigits: digits, maximumFractionDigits: digits }); + } + function toggled_class(bool, css_class) { + return bool ? css_class : ""; + } + function number_invariant(num) { + return Number(num.replace(/,/g, "")); + } + function number_to_timespan(num) { + const SECONDS_IN_MINUTE = 60; + const MINUTES_IN_HOUR = 60; + let str = ""; + let mod = (num % SECONDS_IN_MINUTE); + str = mod.toFixed(0).padStart(2, "0") + str; + num = (num - mod) / SECONDS_IN_MINUTE; + mod = (num % MINUTES_IN_HOUR); + str = mod.toFixed(0).padStart(2, "0") + ":" + str; + num = (num - mod) / MINUTES_IN_HOUR; + return str; + } function round2(num) { return Math.round(num * 100) / 100; } @@ -504,153 +530,6 @@ return style; } - const themes = ["Default", "Cerulean", "Cosmo", "Cyborg", "Darkly", "Flatly", - "Journal", "Litera", "Lumen", "Lux", "Materia", "Minty", "Nuclear", "Pulse", - "Sandstone", "Simplex", "Slate", "Solar", "Spacelab", "Superhero", "United", - "Yeti"]; - const dark_themes = ["Cyborg", "Darkly", "Nuclear", "Slate", "Solar", "Superhero"]; - const theme_light = `:root { - --color-ahead: rgb(128, 255, 128); - --color-behind: rgb(255, 128, 128); - --color-highlight: lightgreen; -}`; - const theme_dark = `:root { - --color-ahead: rgb(0, 128, 0); - --color-behind: rgb(128, 0, 0); - --color-highlight: darkgreen; -} -.BS_bg_btn { - background-color: white; -} -/* Reset colors for generic themes */ -span.songBottom.time, span.scoreBottom, span.scoreTop.ppWeightedValue { - color:unset; -} -span.songTop.pp, span.scoreTop.ppValue, span.scoreTop.ppLabel, span.songTop.mapper { - text-shadow: 1px 1px 2px #000; -}`; - function setup$1() { - const style_data = `.compact { - padding-right: 0 !important; - padding-left: 0 !important; - margin-left: 0px !important; - margin-right: 0px !important; - text-align: center !important; -} - -h5 > * { - margin-right: 0.3em; -} - -.wide_song_table { - max-width: unset !important; -} - -#leaderboard_tool_strip > * { - margin-right: 0.5em; -} - -.offset_tab { - margin-left: auto; -} - -.beatsaver_bg { - background: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200' viewBox='0 0 200 200' version='1.1'%3E%3Cg fill='none' stroke='%23000000' stroke-width='10'%3E %3Cpath d='M 100,7 189,47 100,87 12,47 Z' stroke-linejoin='round'/%3E %3Cpath d='M 189,47 189,155 100,196 12,155 12,47' stroke-linejoin='round'/%3E %3Cpath d='M 100,87 100,196' stroke-linejoin='round'/%3E %3Cpath d='M 26,77 85,106 53,130 Z' stroke-linejoin='round'/%3E %3C/g%3E %3C/svg%3E") no-repeat center/85%; - width: 100%; - height: 100%; -} - -.fas_big { - line-height: 150%; - padding-right: 0.5em; - padding-left: 0.5em; - min-width: 2.25em; - /* Fix for some themes overriding font */ - font-weight: 900; - font-family: "Font Awesome 5 Free"; -} - -.fas_big::before { - font-size: 120%; -} - -[data-tooltip]::before { - visibility: hidden; - background-color: #555; - color: #fff; - border-radius: 6px; - position: absolute; - z-index: 1; - margin-top: -5px; - opacity: 0; - transition: opacity 0.3s; - padding: 0.2em 1em; - content: attr(data-tooltip); - /* Default */ - top: 0; - left: 50%; - right: auto; - bottom: auto; - transform: translate(-50%, -100%); -} -[data-tooltip].has-tooltip-left::before { - top: auto; - right: auto; - bottom: 50%; - left: -11px; - transform: translate(-100%, 50%); -} -[data-tooltip]:hover::before { - visibility: visible; - opacity: 1; -} - -@keyframes fill_anim { - 0%{background-position:top;} - 20%{background-position:bottom;} - 80%{background-position:bottom;} - 100%{background-position:top;} -} -.button_error { - background: linear-gradient(to top, red 50%, transparent 50%); - background-size: 100% 200%; - background-position:top; - animation: fill_anim 3s cubic-bezier(.23,1,.32,1) forwards; -} -.button_success { - background: linear-gradient(to top, green 50%, transparent 50%); - background-size: 100% 200%; - background-position:top; - animation: fill_anim 3s cubic-bezier(.23,1,.32,1) forwards; -} - -/* Fix weird tab list offset */ - -.content li { - margin-top: 0; -} - -/* Fix bulma+scoresable dark color */ -/* Theme CSS will be appended and can therefore - * conveniently overwrite those rules. - * This makes them effectively useful for the default - * Light/Dark Themes of ScoreSaber */ - -.navbar-dropdown, .modal-card-head, .modal-card-foot { - color: var(--textColor, black); - background-color: var(--background, white); - border-color: var(--foreground, #dbdbdb); -} - -.box, .modal-card-body { - color: var(--textColor, black); - background-color: var(--background, white); -} -`; - SSE_addStyle(style_data); - into(document.head, create("link", { rel: "stylesheet", href: "https://cdn.jsdelivr.net/npm/bulma-checkradio/dist/css/bulma-checkradio.min.css" })); - } - function fetch2(url) { return new Promise((resolve, reject) => { const host = get_hostname(url); @@ -686,79 +565,300 @@ h5 > * { window.open(link, "_blank"); } - function noop() { } - function run(fn) { - return fn(); - } - function blank_object() { - return Object.create(null); - } - function run_all(fns) { - fns.forEach(run); - } - function is_function(thing) { - return typeof thing === 'function'; - } - function safe_not_equal(a, b) { - return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function'); - } - function is_empty(obj) { - return Object.keys(obj).length === 0; - } - function append(target, node) { - target.appendChild(node); - } - function append_styles(target, style_sheet_id, styles) { - const append_styles_to = get_root_for_style(target); - if (!append_styles_to.getElementById(style_sheet_id)) { - const style = element('style'); - style.id = style_sheet_id; - style.textContent = styles; - append_stylesheet(append_styles_to, style); + class SessionCache { + constructor(prefix) { + this.prefix = prefix; + if (prefix === undefined) + throw Error("Prefix must be set. If you don't want a prefix, explicitely pass ''."); } - } - function get_root_for_style(node) { - if (!node) - return document; - const root = node.getRootNode ? node.getRootNode() : node.ownerDocument; - if (root.host) { - return root; + get(key) { + const item = sessionStorage.getItem(this.prefix + key); + if (item === null) + return undefined; + return JSON.parse(item); } - return document; - } - function append_stylesheet(node, style) { - append(node.head || node, style); - } - function insert(target, node, anchor) { - target.insertBefore(node, anchor || null); - } - function detach(node) { - node.parentNode.removeChild(node); - } - function destroy_each(iterations, detaching) { - for (let i = 0; i < iterations.length; i += 1) { - if (iterations[i]) - iterations[i].d(detaching); + set(key, value) { + sessionStorage.setItem(this.prefix + key, JSON.stringify(value)); } } - function element(name) { - return document.createElement(name); + + const api_cache$1 = new SessionCache("beast"); + async function get_data(song_key) { + const cached_data = api_cache$1.get(song_key); + if (cached_data !== undefined) + return cached_data; + try { + const data_str = await fetch2(`https://bsaber.com/wp-json/bsaber-api/songs/${song_key}/ratings`); + const data = JSON.parse(data_str); + api_cache$1.set(song_key, data); + return data; + } + catch (e) { + return undefined; + } } - function text(data) { - return document.createTextNode(data); + async function get_bookmarks(username, page, count) { + try { + const data_str = await fetch2(`https://bsaber.com/wp-json/bsaber-api/songs/?bookmarked_by=${username}&page=${page}&count=${count}`); + const data = JSON.parse(data_str); + return data; + } + catch (e) { + return undefined; + } } - function space() { - return text(' '); + + function get_song_compare_value(song_a, song_b) { + if (song_a.pp > 0 || song_b.pp > 0) { + return [song_a.pp, song_b.pp]; + } + else if (song_a.score !== undefined && song_b.score !== undefined) { + return [song_a.score, song_b.score]; + } + else if (song_a.accuracy !== undefined && song_b.accuracy !== undefined) { + return [song_a.accuracy * get_song_mod_multiplier(song_a), song_b.accuracy * get_song_mod_multiplier(song_b)]; + } + else { + return [-1, -1]; + } + } + function get_song_mod_multiplier(song) { + if (!song.mods) + return 1.0; + let multiplier = 1.0; + for (const mod of song.mods) { + switch (mod) { + case "NF": + multiplier -= 0.50; + break; + case "NO": + multiplier -= 0.05; + break; + case "NB": + multiplier -= 0.10; + break; + case "SS": + multiplier -= 0.30; + break; + case "NA": + multiplier -= 0.30; + break; + case "DA": + multiplier += 0.07; + break; + case "GN": + multiplier += 0.11; + break; + case "FS": + multiplier += 0.08; + break; + } + } + return Math.max(0, multiplier); } - function listen(node, event, handler, options) { - node.addEventListener(event, handler, options); - return () => node.removeEventListener(event, handler, options); + function get_song_hash_from_text(text) { + var _a; + const res = Global.song_hash_reg.exec(text); + return res ? (_a = res[1]) === null || _a === void 0 ? void 0 : _a.toLowerCase() : undefined; } - function attr(node, attribute, value) { - if (value == null) - node.removeAttribute(attribute); - else if (node.getAttribute(attribute) !== value) - node.setAttribute(attribute, value); + async function oneclick_install(song_key) { + const lastCheck = localStorage.getItem("oneclick-prompt"); + const prompt = !lastCheck || + new Date(lastCheck).getTime() + (1000 * 60 * 60 * 24 * 31) < new Date().getTime(); + if (prompt) { + localStorage.setItem("oneclick-prompt", new Date().getTime().toString()); + const resp = await show_modal({ + buttons: { + install: { text: "Get ModAssistant Installer", class: "is-info" }, + done: { text: "OK, now leave me alone", class: "is-success" }, + }, + text: "OneClick™ requires any current ModInstaller tool with the OneClick™ feature enabled.\nMake sure you have one installed before proceeding.", + }); + if (resp === "install") { + window.open("https://github.com/Assistant/ModAssistant/releases"); + return; + } + } + console.log("Downloading: ", song_key); + window.location.assign(`beatsaver://${song_key}`); + } + function song_equals(a, b) { + if (a === b) + return true; + if (a === undefined || b === undefined) + return false; + return (a.accuracy === b.accuracy && + a.pp === b.pp && + a.score === b.score && + a.time === b.time && + array_equals(a.mods, b.mods)); + } + function array_equals(a, b) { + if (a === b) + return true; + if (a === undefined || b === undefined) + return false; + if (a.length !== b.length) + return false; + for (let i = 0; i < a.length; i++) { + if (a[i] !== b[i]) + return false; + } + return true; + } + function parse_mods(mods) { + if (!mods) + return undefined; + const modarr = mods.split(/,/g); + if (modarr.length === 0) + return undefined; + return modarr; + } + function get_notes_count(diff_name, characteristic, version) { + var _a; + if (diff_name === "Expert+") + diff_name = "ExpertPlus"; + const diff = version.diffs.find((d) => (d.characteristic === characteristic && d.difficulty === diff_name)); + return (_a = diff === null || diff === void 0 ? void 0 : diff.notes) !== null && _a !== void 0 ? _a : -1; + } + function calculate_max_score(notes) { + const note_score = 115; + if (notes <= 1) + return note_score * (0 + (notes - 0) * 1); + if (notes <= 5) + return note_score * (1 + (notes - 1) * 2); + if (notes <= 13) + return note_score * (9 + (notes - 5) * 4); + return note_score * (41 + (notes - 13) * 8); + } + function diff_name_to_value(name) { + switch (name) { + case "Easy": return 1; + case "Medium": return 3; + case "Hard": return 5; + case "Expert": return 7; + case "ExpertPlus": return 9; + default: return -1; + } + } + + const api_cache = new SessionCache("saver"); + async function get_data_by_hash(song_hash) { + const cached_data = api_cache.get(song_hash); + if (cached_data !== undefined) + return cached_data; + try { + const data_str = await fetch2(`https://api.beatsaver.com/maps/hash/${song_hash}`); + const data = JSON.parse(data_str); + api_cache.set(song_hash, data); + return data; + } + catch (err) { + logc("Failed to download song data", err); + return undefined; + } + } + async function get_scoresaber_data_by_hash(song_hash, diff_name) { + try { + const diff_value = diff_name === undefined ? 0 : diff_name_to_value(diff_name); + const data_str = await fetch2(`https://beatsaver.com/api/scores/${song_hash}/0?difficulty=${diff_value}&gameMode=0`); + const data = JSON.parse(data_str); + return data; + } + catch (err) { + logc("Failed to download song data", err); + return undefined; + } + } + + class Lazy { + constructor(generator) { + this.generator = generator; + } + get() { + if (this.value === undefined) { + this.value = this.generator(); + } + return this.value; + } + reset() { + this.value = undefined; + } + } + + function noop() { } + function run(fn) { + return fn(); + } + function blank_object() { + return Object.create(null); + } + function run_all(fns) { + fns.forEach(run); + } + function is_function(thing) { + return typeof thing === 'function'; + } + function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function'); + } + function is_empty(obj) { + return Object.keys(obj).length === 0; + } + function append(target, node) { + target.appendChild(node); + } + function append_styles(target, style_sheet_id, styles) { + const append_styles_to = get_root_for_style(target); + if (!append_styles_to.getElementById(style_sheet_id)) { + const style = element('style'); + style.id = style_sheet_id; + style.textContent = styles; + append_stylesheet(append_styles_to, style); + } + } + function get_root_for_style(node) { + if (!node) + return document; + const root = node.getRootNode ? node.getRootNode() : node.ownerDocument; + if (root.host) { + return root; + } + return document; + } + function append_stylesheet(node, style) { + append(node.head || node, style); + } + function insert(target, node, anchor) { + target.insertBefore(node, anchor || null); + } + function detach(node) { + node.parentNode.removeChild(node); + } + function destroy_each(iterations, detaching) { + for (let i = 0; i < iterations.length; i += 1) { + if (iterations[i]) + iterations[i].d(detaching); + } + } + function element(name) { + return document.createElement(name); + } + function text(data) { + return document.createTextNode(data); + } + function space() { + return text(' '); + } + function listen(node, event, handler, options) { + node.addEventListener(event, handler, options); + return () => node.removeEventListener(event, handler, options); + } + function attr(node, attribute, value) { + if (value == null) + node.removeAttribute(attribute); + else if (node.getAttribute(attribute) !== value) + node.setAttribute(attribute, value); } function children(element) { return Array.from(element.childNodes); @@ -971,313 +1071,47 @@ h5 > * { // `false` as a special case of no DOM component $$.fragment = create_fragment ? create_fragment($$.ctx) : false; if (options.target) { - if (options.hydrate) { - const nodes = children(options.target); - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - $$.fragment && $$.fragment.l(nodes); - nodes.forEach(detach); - } - else { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - $$.fragment && $$.fragment.c(); - } - if (options.intro) - transition_in(component.$$.fragment); - mount_component(component, options.target, options.anchor, options.customElement); - flush(); - } - set_current_component(parent_component); - } - /** - * Base class for Svelte components. Used when dev=false. - */ - class SvelteComponent { - $destroy() { - destroy_component(this, 1); - this.$destroy = noop; - } - $on(type, callback) { - const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = [])); - callbacks.push(callback); - return () => { - const index = callbacks.indexOf(callback); - if (index !== -1) - callbacks.splice(index, 1); - }; - } - $set($$props) { - if (this.$$set && !is_empty($$props)) { - this.$$.skip_bound = true; - this.$$set($$props); - this.$$.skip_bound = false; - } - } - } - - class SessionCache { - constructor(prefix) { - this.prefix = prefix; - if (prefix === undefined) - throw Error("Prefix must be set. If you don't want a prefix, explicitely pass ''."); - } - get(key) { - const item = sessionStorage.getItem(this.prefix + key); - if (item === null) - return undefined; - return JSON.parse(item); - } - set(key, value) { - sessionStorage.setItem(this.prefix + key, JSON.stringify(value)); - } - } - - new SessionCache("beast"); - async function get_bookmarks(username, page, count) { - try { - const data_str = await fetch2(`https://bsaber.com/wp-json/bsaber-api/songs/?bookmarked_by=${username}&page=${page}&count=${count}`); - const data = JSON.parse(data_str); - return data; - } - catch (e) { - return undefined; - } - } - - class Limiter { - constructor() { - this.ratelimit_reset = undefined; - this.ratelimit_remaining = undefined; - } - async wait() { - const now = unix_timestamp(); - if (this.ratelimit_reset === undefined || now > this.ratelimit_reset) { - this.ratelimit_reset = undefined; - this.ratelimit_remaining = undefined; - return; - } - if (this.ratelimit_remaining === 0) { - const sleepTime = (this.ratelimit_reset - now); - console.log(`Waiting for cloudflare rate limiter... ${sleepTime}sec`); - await sleep(sleepTime * 1000); - this.ratelimit_remaining = this.ratelimit_limit; - this.ratelimit_reset = undefined; - } - } - setLimitData(remaining, reset, limit) { - this.ratelimit_remaining = remaining; - this.ratelimit_reset = reset; - this.ratelimit_limit = limit; - } - } - async function sleep(timeout) { - return new Promise(resolve => setTimeout(resolve, timeout)); - } - function unix_timestamp() { - return Math.round((new Date()).getTime() / 1000); - } - - const api_cache = new SessionCache("saver"); - async function get_data_by_hash(song_hash) { - const cached_data = api_cache.get(song_hash); - if (cached_data !== undefined) - return cached_data; - try { - const data_str = await fetch2(`https://api.beatsaver.com/maps/hash/${song_hash}`); - const data = JSON.parse(data_str); - api_cache.set(song_hash, data); - return data; - } - catch (err) { - logc("Failed to download song data", err); - return undefined; - } - } - - async function oneclick_install(song_key) { - const lastCheck = localStorage.getItem("oneclick-prompt"); - const prompt = !lastCheck || - new Date(lastCheck).getTime() + (1000 * 60 * 60 * 24 * 31) < new Date().getTime(); - if (prompt) { - localStorage.setItem("oneclick-prompt", new Date().getTime().toString()); - const resp = await show_modal({ - buttons: { - install: { text: "Get ModAssistant Installer", class: "is-info" }, - done: { text: "OK, now leave me alone", class: "is-success" }, - }, - text: "OneClick™ requires any current ModInstaller tool with the OneClick™ feature enabled.\nMake sure you have one installed before proceeding.", - }); - if (resp === "install") { - window.open("https://github.com/Assistant/ModAssistant/releases"); - return; - } - } - console.log("Downloading: ", song_key); - window.location.assign(`beatsaver://${song_key}`); - } - function song_equals(a, b) { - if (a === b) - return true; - if (a === undefined || b === undefined) - return false; - return (a.accuracy === b.accuracy && - a.pp === b.pp && - a.score === b.score && - a.time === b.time && - array_equals(a.mods, b.mods)); - } - function array_equals(a, b) { - if (a === b) - return true; - if (a === undefined || b === undefined) - return false; - if (a.length !== b.length) - return false; - for (let i = 0; i < a.length; i++) { - if (a[i] !== b[i]) - return false; - } - return true; - } - function parse_mods(mods) { - if (!mods) - return undefined; - const modarr = mods.split(/,/g); - if (modarr.length === 0) - return undefined; - return modarr; - } - - const SCORESABER_LINK = "https://new.scoresaber.com/api"; - const API_LIMITER = new Limiter(); - async function get_user_recent_songs_dynamic(user_id, page) { - logc(`Fetching user ${user_id} page ${page}`); - return get_user_recent_songs_new_api_wrap(user_id, page); - } - async function get_user_recent_songs_new_api_wrap(user_id, page) { - const recent_songs = await get_user_recent_songs(user_id, page); - if (!recent_songs) { - return { - meta: { was_last_page: true }, - songs: [] - }; - } - return { - meta: { - was_last_page: recent_songs.scores.length < 8 - }, - songs: recent_songs.scores.map(s => [String(s.leaderboardId), { - time: s.timeSet, - pp: s.pp, - accuracy: s.maxScore !== 0 ? round2((s.unmodififiedScore / s.maxScore) * 100) : undefined, - score: s.score, - mods: parse_mods(s.mods) - }]) - }; - } - async function get_user_recent_songs(user_id, page) { - const req = await auto_fetch_retry(`${SCORESABER_LINK}/player/${user_id}/scores/recent/${page}`); - if (req.status === 404) { - return null; - } - const data = await req.json(); - return sanitize_song_ids(data); - } - async function get_user_info_basic(user_id) { - const req = await auto_fetch_retry(`${SCORESABER_LINK}/player/${user_id}/basic`); - const data = await req.json(); - return sanitize_player_ids(data); - } - async function auto_fetch_retry(url) { - const MAX_RETRIES = 20; - const SLEEP_WAIT = 5000; - for (let retries = MAX_RETRIES; retries >= 0; retries--) { - await API_LIMITER.wait(); - const response = await fetch(url); - const remaining = Number(response.headers.get("x-ratelimit-remaining")); - const reset = Number(response.headers.get("x-ratelimit-reset")); - const limit = Number(response.headers.get("x-ratelimit-limit")); - API_LIMITER.setLimitData(remaining, reset, limit); - if (response.status === 429) { - await sleep(SLEEP_WAIT); - } - else { - return response; - } - } - throw new Error("Can't fetch data from new.scoresaber."); - } - function sanitize_player_ids(data) { - data.playerInfo.playerId = String(data.playerInfo.playerId); - return data; - } - function sanitize_song_ids(data) { - for (const s of data.scores) { - s.scoreId = String(s.scoreId); - s.leaderboardId = String(s.leaderboardId); - s.playerId = String(s.playerId); - } - return data; - } - - async function fetch_user(user_id, force = false) { - var _a, _b; - let user = Global.user_list[user_id]; - if (!user) { - user = { - name: "User" + user_id, - songs: {} - }; - Global.user_list[user_id] = user; - } - let page_max = undefined; - let user_name = user.name; - let updated = false; - SseEvent.StatusInfo.invoke({ text: `Fetching user ${user_name}` }); - if (get_use_new_ss_api()) { - const user_data = await get_user_info_basic(user_id); - user_name = user_data.playerInfo.playerName; - } - for (let page = 1;; page++) { - SseEvent.StatusInfo.invoke({ text: `Updating user ${user_name} page ${page}/${(page_max !== null && page_max !== void 0 ? page_max : "?")}` }); - const recent_songs = await get_user_recent_songs_dynamic(user_id, page); - const { has_old_entry, has_updated } = process_user_page(recent_songs.songs, user); - updated = updated || has_updated; - page_max = (_a = recent_songs.meta.max_pages) !== null && _a !== void 0 ? _a : page_max; - user_name = (_b = recent_songs.meta.user_name) !== null && _b !== void 0 ? _b : user_name; - if ((!force && has_old_entry) || recent_songs.meta.was_last_page) { - break; - } - } - user.name = user_name !== null && user_name !== void 0 ? user_name : user.name; - if (updated) { - save(); - } - SseEvent.StatusInfo.invoke({ text: `User ${user_name} updated` }); - SseEvent.UserCacheChanged.invoke(); - } - async function fetch_all(force = false) { - const users = Object.keys(Global.user_list); - for (const user of users) { - await fetch_user(user, force); - } - SseEvent.StatusInfo.invoke({ text: `All users updated` }); - } - function process_user_page(songs, user) { - let has_old_entry = false; - let has_updated = false; - for (const [song_id, song] of songs) { - const song_old = user.songs[song_id]; - if (!song_old || !song_equals(song_old, song)) { - logc("Updated: ", song_old, song); - has_updated = true; + if (options.hydrate) { + const nodes = children(options.target); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + $$.fragment && $$.fragment.l(nodes); + nodes.forEach(detach); } else { - logc("Old found: ", song); - has_old_entry = true; + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + $$.fragment && $$.fragment.c(); + } + if (options.intro) + transition_in(component.$$.fragment); + mount_component(component, options.target, options.anchor, options.customElement); + flush(); + } + set_current_component(parent_component); + } + /** + * Base class for Svelte components. Used when dev=false. + */ + class SvelteComponent { + $destroy() { + destroy_component(this, 1); + this.$destroy = noop; + } + $on(type, callback) { + const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = [])); + callbacks.push(callback); + return () => { + const index = callbacks.indexOf(callback); + if (index !== -1) + callbacks.splice(index, 1); + }; + } + $set($$props) { + if (this.$$set && !is_empty($$props)) { + this.$$.skip_bound = true; + this.$$set($$props); + this.$$.skip_bound = false; } - user.songs[song_id] = song; } - return { has_old_entry, has_updated }; } /* src/components/QuickButton.svelte generated by Svelte v3.41.0 */ @@ -1644,70 +1478,563 @@ h5 > * { : undefined); } - if ($$self.$$.dirty & /*preview, page, type*/ 2053) { - $$invalidate(7, display = !preview && page !== undefined - ? `display: var(--sse-show-${page}-${type}, inline-flex);` - : ""); - } + if ($$self.$$.dirty & /*preview, page, type*/ 2053) { + $$invalidate(7, display = !preview && page !== undefined + ? `display: var(--sse-show-${page}-${type}, inline-flex);` + : ""); + } + + if ($$self.$$.dirty & /*type, preview, song_hash*/ 1029) { + { + $$invalidate(5, color = ""); + $$invalidate(6, tooltip = BMButtonHelp[type].tip); + + if (type === "BeastBook" && !preview) { + const bookmarked = song_hash === undefined + ? false + : check_bsaber_bookmark(song_hash); + + $$invalidate(5, color = bookmarked ? "is-success" : "is-danger"); + + $$invalidate(6, tooltip = bookmarked + ? "Bookmarked on BeastSaber" + : "Not Bookmarked on BeastSaber"); + } + } + } + }; + + return [ + type, + size, + preview, + button, + txtDummyNode, + color, + tooltip, + display, + disabled, + onclick, + song_hash, + page, + input_binding, + div_binding + ]; + } + + class QuickButton extends SvelteComponent { + constructor(options) { + super(); + + init( + this, + options, + instance$1, + create_fragment$1, + safe_not_equal, + { + song_hash: 10, + type: 0, + size: 1, + preview: 2, + page: 11 + }, + add_css + ); + } + } + + const PAGE = "song"; + const shared = new Lazy(() => { + var _a; + let details_box = check(document.querySelector(".title.is-5")); + details_box = check(details_box.parentElement.parentElement.parentElement); + const song_hash = get_song_hash_from_text(details_box.innerHTML); + const diff_name = (_a = document.querySelector(`div.tabs a.selected`)) === null || _a === void 0 ? void 0 : _a.innerText; + return { song_hash, details_box, diff_name }; + }); + function setup_song_filter_tabs() { + if (!is_song_leaderboard_page()) { + return; + } + const tab_list_content = check(document.querySelector(".tabs > ul")); + function load_friends() { + let score_table = check(document.querySelector(".ranking .global > tbody")); + Global.song_table_backup = score_table; + const table = check(score_table.parentNode); + table.removeChild(score_table); + score_table = table.appendChild(create("tbody")); + const song_id = Global.leaderboard_reg.exec(window.location.pathname)[1]; + const elements = []; + for (const [user_id, user] of Object.entries(Global.user_list)) { + const song = user.songs[song_id]; + if (!song) + continue; + elements.push([song, generate_song_table_row(user_id, user, song)]); + } + elements.sort((a, b) => { const [sa, sb] = get_song_compare_value(a[0], b[0]); return sb - sa; }); + elements.forEach(x => score_table.appendChild(x[1])); + add_percentage(); + } + function load_all() { + if (!Global.song_table_backup) { + return; + } + let score_table = check(document.querySelector(".ranking .global > tbody")); + const table = check(score_table.parentNode); + table.removeChild(score_table); + score_table = table.appendChild(Global.song_table_backup); + Global.song_table_backup = undefined; + add_percentage(); + } + tab_list_content.appendChild(generate_tab("All Scores", "all_scores_tab", load_all, true, true)); + tab_list_content.appendChild(generate_tab("Friends", "friends_tab", load_friends, false, false)); + } + function setup_dl_link_leaderboard() { + if (!is_song_leaderboard_page()) { + return; + } + shared.reset(); + const { song_hash, details_box } = shared.get(); + const tool_strip = create("div", { + id: "leaderboard_tool_strip", + style: { + marginTop: "1em" + } + }); + for (const btn of BMButton) { + new QuickButton({ + target: tool_strip, + props: { song_hash, size: "large", type: btn, page: PAGE } + }); + } + details_box.appendChild(tool_strip); + const song_warning = create("div"); + details_box.appendChild(song_warning); + const box_style = { class: "box", style: { display: "flex", flexDirection: "column", alignItems: "end", padding: "0.5em 1em" } }; + const beatsaver_box = create("div", box_style, create("b", {}, "BeatSaver"), create("span", { class: "icon" }, create("i", { class: "fas fa-spinner fa-pulse" }))); + const beastsaber_box = create("div", box_style, create("b", {}, "BeastSaber"), create("span", { class: "icon" }, create("i", { class: "fas fa-spinner fa-pulse" }))); + const column_style = { class: "column", style: { padding: "0 0.75em" } }; + details_box.appendChild(create("div", { + class: "columns", + style: { + marginTop: "1em" + } + }, create("div", column_style, beatsaver_box), create("div", column_style, beastsaber_box))); + if (!song_hash) + return; + (async () => { + const data = await get_data_by_hash(song_hash); + if (!data) + return; + show_song_warning(song_warning, song_hash, data); + show_beatsaver_song_data(beatsaver_box, data); + const data2 = await get_data(data.id); + if (!data2) + return; + show_beastsaber_song_data(beastsaber_box, data2); + })(); + } + function show_song_warning(elem, song_hash, data) { + const contains_version = data.versions.some(x => x.hash === song_hash); + if (!contains_version) { + const new_song_hash = data.versions[data.versions.length - 1].hash; + const { diff_name } = shared.get(); + intor(elem, create("div", { + style: { marginTop: "1em", cursor: "pointer" }, + class: "notification is-warning", + onclick: async () => { + const bs2ss = await get_scoresaber_data_by_hash(new_song_hash, diff_name); + if (bs2ss === undefined) + return; + new_page(`https://scoresaber.com/leaderboard/${bs2ss.uid}`); + }, + }, create("i", { class: "fas fa-exclamation-triangle" }), create("span", { style: { marginLeft: "0.25em" } }, "A newer version of this song exists on BeatSaver"))); + } + } + function show_beatsaver_song_data(elem, data) { + intor(elem, create("div", { title: "Downloads" }, `${data.stats.downloads} 💾`), create("div", { title: "Upvotes" }, `${data.stats.upvotes} 👍`), create("div", { title: "Downvotes" }, `${data.stats.downvotes} 👎`), create("div", { title: "Beatmap Rating" }, `${(data.stats.score * 100).toFixed(2)}% 💯`), create("div", { title: "Beatmap Duration" }, `${number_to_timespan(data.metadata.duration)} ⏱`)); + } + function show_beastsaber_song_data(elem, data) { + intor(elem, create("div", { title: "Fun Factor" }, `${data.average_ratings.fun_factor} 😃`), create("div", { title: "Rhythm" }, `${data.average_ratings.rhythm} 🎶`), create("div", { title: "Flow" }, `${data.average_ratings.flow} 🌊`), create("div", { title: "Pattern Quality" }, `${data.average_ratings.pattern_quality} 💠`), create("div", { title: "Readability" }, `${data.average_ratings.readability} 👓`), create("div", { title: "Level Quality" }, `${data.average_ratings.level_quality} ✔️`)); + } + function generate_song_table_row(user_id, user, song) { + return create("tr", {}, create("td", { class: "picture" }), create("td", { class: "rank" }, "-"), create("td", { class: "player" }, generate_song_table_player(user_id, user)), create("td", { class: "score" }, song.score !== undefined ? format_en(song.score, 0) : "-"), create("td", { class: "timeset" }, moment(song.time).fromNow()), create("td", { class: "mods" }, song.mods !== undefined ? song.mods.toString() : "-"), create("td", { class: "percentage" }, song.accuracy ? (song.accuracy.toString() + "%") : "-"), create("td", { class: "pp" }, create("span", { class: "scoreTop ppValue" }, format_en(song.pp)), create("span", { class: "scoreTop ppLabel" }, "pp"))); + } + function generate_song_table_player(user_id, user) { + return create("a", { href: `${Global.scoresaber_link}/u/${user_id}` }, user.name); + } + function generate_tab(title, css_id, action, is_active, has_offset) { + const tabClass = `filter_tab ${toggled_class(is_active, "is-active")} ${toggled_class(has_offset, "offset_tab")}`; + return create("li", { + id: css_id, + class: tabClass, + }, create("a", { + class: "has-text-info", + onclick: () => { + document.querySelectorAll(".tabs > ul .filter_tab").forEach(x => x.classList.remove("is-active")); + check(document.getElementById(css_id)).classList.add("is-active"); + if (action) + action(); + } + }, title)); + } + function highlight_user() { + const home_user = get_home_user(); + if (!home_user) { + return; + } + const element = document.querySelector(`table.ranking.global a[href='/u/${home_user.id}']`); + if (element != null) { + element.parentElement.parentElement.style.backgroundColor = "var(--color-highlight)"; + } + } + function add_percentage() { + if (!is_song_leaderboard_page()) { + return; + } + const { song_hash, diff_name } = shared.get(); + if (!song_hash) { + return; + } + (async () => { + const data = await get_data_by_hash(song_hash); + if (!data) + return; + if (!diff_name) + return; + const version = data.versions.find((v) => v.hash === song_hash.toLowerCase()); + if (!diff_name || !version) + return; + const notes = get_notes_count(diff_name, "Standard", version); + if (notes < 0) + return; + const max_score = calculate_max_score(notes); + const user_scores = document.querySelectorAll("table.ranking.global tbody > tr"); + for (const score_row of user_scores) { + const percentage_column = check(score_row.querySelector("td.percentage")); + const percentage_value = percentage_column.innerText; + if (percentage_value === "-") { + const score = check(score_row.querySelector("td.score")).innerText; + const score_num = number_invariant(score); + const calculated_percentage = (100 * score_num / max_score).toFixed(2); + percentage_column.innerText = calculated_percentage + "%"; + } + } + })(); + } + + const themes = ["Default", "Cerulean", "Cosmo", "Cyborg", "Darkly", "Flatly", + "Journal", "Litera", "Lumen", "Lux", "Materia", "Minty", "Nuclear", "Pulse", + "Sandstone", "Simplex", "Slate", "Solar", "Spacelab", "Superhero", "United", + "Yeti"]; + const dark_themes = ["Cyborg", "Darkly", "Nuclear", "Slate", "Solar", "Superhero"]; + const theme_light = `:root { + --color-ahead: rgb(128, 255, 128); + --color-behind: rgb(255, 128, 128); + --color-highlight: lightgreen; +}`; + const theme_dark = `:root { + --color-ahead: rgb(0, 128, 0); + --color-behind: rgb(128, 0, 0); + --color-highlight: darkgreen; +} +.BS_bg_btn { + background-color: white; +} +/* Reset colors for generic themes */ +span.songBottom.time, span.scoreBottom, span.scoreTop.ppWeightedValue { + color:unset; +} +span.songTop.pp, span.scoreTop.ppValue, span.scoreTop.ppLabel, span.songTop.mapper { + text-shadow: 1px 1px 2px #000; +}`; + function setup$1() { + const style_data = `.compact { + padding-right: 0 !important; + padding-left: 0 !important; + margin-left: 0px !important; + margin-right: 0px !important; + text-align: center !important; +} + +h5 > * { + margin-right: 0.3em; +} + +.wide_song_table { + max-width: unset !important; +} + +#leaderboard_tool_strip > * { + margin-right: 0.5em; +} + +.offset_tab { + margin-left: auto; +} + +.beatsaver_bg { + background: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200' viewBox='0 0 200 200' version='1.1'%3E%3Cg fill='none' stroke='%23000000' stroke-width='10'%3E %3Cpath d='M 100,7 189,47 100,87 12,47 Z' stroke-linejoin='round'/%3E %3Cpath d='M 189,47 189,155 100,196 12,155 12,47' stroke-linejoin='round'/%3E %3Cpath d='M 100,87 100,196' stroke-linejoin='round'/%3E %3Cpath d='M 26,77 85,106 53,130 Z' stroke-linejoin='round'/%3E %3C/g%3E %3C/svg%3E") no-repeat center/85%; + width: 100%; + height: 100%; +} + +.fas_big { + line-height: 150%; + padding-right: 0.5em; + padding-left: 0.5em; + min-width: 2.25em; + /* Fix for some themes overriding font */ + font-weight: 900; + font-family: "Font Awesome 5 Free"; +} + +.fas_big::before { + font-size: 120%; +} + +[data-tooltip]::before { + visibility: hidden; + background-color: #555; + color: #fff; + border-radius: 6px; + position: absolute; + z-index: 1; + margin-top: -5px; + opacity: 0; + transition: opacity 0.3s; + padding: 0.2em 1em; + content: attr(data-tooltip); + /* Default */ + top: 0; + left: 50%; + right: auto; + bottom: auto; + transform: translate(-50%, -100%); +} +[data-tooltip].has-tooltip-left::before { + top: auto; + right: auto; + bottom: 50%; + left: -11px; + transform: translate(-100%, 50%); +} +[data-tooltip]:hover::before { + visibility: visible; + opacity: 1; +} + +@keyframes fill_anim { + 0%{background-position:top;} + 20%{background-position:bottom;} + 80%{background-position:bottom;} + 100%{background-position:top;} +} +.button_error { + background: linear-gradient(to top, red 50%, transparent 50%); + background-size: 100% 200%; + background-position:top; + animation: fill_anim 3s cubic-bezier(.23,1,.32,1) forwards; +} +.button_success { + background: linear-gradient(to top, green 50%, transparent 50%); + background-size: 100% 200%; + background-position:top; + animation: fill_anim 3s cubic-bezier(.23,1,.32,1) forwards; +} + +/* Fix weird tab list offset */ - if ($$self.$$.dirty & /*type, preview, song_hash*/ 1029) { - { - $$invalidate(5, color = ""); - $$invalidate(6, tooltip = BMButtonHelp[type].tip); +.content li { + margin-top: 0; +} - if (type === "BeastBook" && !preview) { - const bookmarked = song_hash === undefined - ? false - : check_bsaber_bookmark(song_hash); +/* Fix bulma+scoresable dark color */ +/* Theme CSS will be appended and can therefore + * conveniently overwrite those rules. + * This makes them effectively useful for the default + * Light/Dark Themes of ScoreSaber */ - $$invalidate(5, color = bookmarked ? "is-success" : "is-danger"); +.navbar-dropdown, .modal-card-head, .modal-card-foot { + color: var(--textColor, black); + background-color: var(--background, white); + border-color: var(--foreground, #dbdbdb); +} - $$invalidate(6, tooltip = bookmarked - ? "Bookmarked on BeastSaber" - : "Not Bookmarked on BeastSaber"); - } - } - } - }; +.box, .modal-card-body { + color: var(--textColor, black); + background-color: var(--background, white); +} +`; + SSE_addStyle(style_data); + into(document.head, create("link", { rel: "stylesheet", href: "https://cdn.jsdelivr.net/npm/bulma-checkradio/dist/css/bulma-checkradio.min.css" })); + } - return [ - type, - size, - preview, - button, - txtDummyNode, - color, - tooltip, - display, - disabled, - onclick, - song_hash, - page, - input_binding, - div_binding - ]; + class Limiter { + constructor() { + this.ratelimit_reset = undefined; + this.ratelimit_remaining = undefined; + } + async wait() { + const now = unix_timestamp(); + if (this.ratelimit_reset === undefined || now > this.ratelimit_reset) { + this.ratelimit_reset = undefined; + this.ratelimit_remaining = undefined; + return; + } + if (this.ratelimit_remaining === 0) { + const sleepTime = (this.ratelimit_reset - now); + console.log(`Waiting for cloudflare rate limiter... ${sleepTime}sec`); + await sleep(sleepTime * 1000); + this.ratelimit_remaining = this.ratelimit_limit; + this.ratelimit_reset = undefined; + } + } + setLimitData(remaining, reset, limit) { + this.ratelimit_remaining = remaining; + this.ratelimit_reset = reset; + this.ratelimit_limit = limit; + } + } + async function sleep(timeout) { + return new Promise(resolve => setTimeout(resolve, timeout)); + } + function unix_timestamp() { + return Math.round((new Date()).getTime() / 1000); } - class QuickButton extends SvelteComponent { - constructor(options) { - super(); + const SCORESABER_LINK = "https://new.scoresaber.com/api"; + const API_LIMITER = new Limiter(); + async function get_user_recent_songs_dynamic(user_id, page) { + logc(`Fetching user ${user_id} page ${page}`); + return get_user_recent_songs_new_api_wrap(user_id, page); + } + async function get_user_recent_songs_new_api_wrap(user_id, page) { + const recent_songs = await get_user_recent_songs(user_id, page); + if (!recent_songs) { + return { + meta: { was_last_page: true }, + songs: [] + }; + } + return { + meta: { + was_last_page: recent_songs.scores.length < 8 + }, + songs: recent_songs.scores.map(s => [String(s.leaderboardId), { + time: s.timeSet, + pp: s.pp, + accuracy: s.maxScore !== 0 ? round2((s.unmodififiedScore / s.maxScore) * 100) : undefined, + score: s.score, + mods: parse_mods(s.mods) + }]) + }; + } + async function get_user_recent_songs(user_id, page) { + const req = await auto_fetch_retry(`${SCORESABER_LINK}/player/${user_id}/scores/recent/${page}`); + if (req.status === 404) { + return null; + } + const data = await req.json(); + return sanitize_song_ids(data); + } + async function get_user_info_basic(user_id) { + const req = await auto_fetch_retry(`${SCORESABER_LINK}/player/${user_id}/basic`); + const data = await req.json(); + return sanitize_player_ids(data); + } + async function auto_fetch_retry(url) { + const MAX_RETRIES = 20; + const SLEEP_WAIT = 5000; + for (let retries = MAX_RETRIES; retries >= 0; retries--) { + await API_LIMITER.wait(); + const response = await fetch(url); + const remaining = Number(response.headers.get("x-ratelimit-remaining")); + const reset = Number(response.headers.get("x-ratelimit-reset")); + const limit = Number(response.headers.get("x-ratelimit-limit")); + API_LIMITER.setLimitData(remaining, reset, limit); + if (response.status === 429) { + await sleep(SLEEP_WAIT); + } + else { + return response; + } + } + throw new Error("Can't fetch data from new.scoresaber."); + } + function sanitize_player_ids(data) { + data.playerInfo.playerId = String(data.playerInfo.playerId); + return data; + } + function sanitize_song_ids(data) { + for (const s of data.scores) { + s.scoreId = String(s.scoreId); + s.leaderboardId = String(s.leaderboardId); + s.playerId = String(s.playerId); + } + return data; + } - init( - this, - options, - instance$1, - create_fragment$1, - safe_not_equal, - { - song_hash: 10, - type: 0, - size: 1, - preview: 2, - page: 11 - }, - add_css - ); - } + async function fetch_user(user_id, force = false) { + var _a, _b; + let user = Global.user_list[user_id]; + if (!user) { + user = { + name: "User" + user_id, + songs: {} + }; + Global.user_list[user_id] = user; + } + let page_max = undefined; + let user_name = user.name; + let updated = false; + SseEvent.StatusInfo.invoke({ text: `Fetching user ${user_name}` }); + if (get_use_new_ss_api()) { + const user_data = await get_user_info_basic(user_id); + user_name = user_data.playerInfo.playerName; + } + for (let page = 1;; page++) { + SseEvent.StatusInfo.invoke({ text: `Updating user ${user_name} page ${page}/${(page_max !== null && page_max !== void 0 ? page_max : "?")}` }); + const recent_songs = await get_user_recent_songs_dynamic(user_id, page); + const { has_old_entry, has_updated } = process_user_page(recent_songs.songs, user); + updated = updated || has_updated; + page_max = (_a = recent_songs.meta.max_pages) !== null && _a !== void 0 ? _a : page_max; + user_name = (_b = recent_songs.meta.user_name) !== null && _b !== void 0 ? _b : user_name; + if ((!force && has_old_entry) || recent_songs.meta.was_last_page) { + break; + } + } + user.name = user_name !== null && user_name !== void 0 ? user_name : user.name; + if (updated) { + save(); + } + SseEvent.StatusInfo.invoke({ text: `User ${user_name} updated` }); + SseEvent.UserCacheChanged.invoke(); + } + async function fetch_all(force = false) { + const users = Object.keys(Global.user_list); + for (const user of users) { + await fetch_user(user, force); + } + SseEvent.StatusInfo.invoke({ text: `All users updated` }); + } + function process_user_page(songs, user) { + let has_old_entry = false; + let has_updated = false; + for (const [song_id, song] of songs) { + const song_old = user.songs[song_id]; + if (!song_old || !song_equals(song_old, song)) { + logc("Updated: ", song_old, song); + has_updated = true; + } + else { + logc("Old found: ", song); + has_old_entry = true; + } + user.songs[song_id] = song; + } + return { has_old_entry, has_updated }; } function update_wide_table_css() { @@ -2632,13 +2959,20 @@ h5 > * { added = []; mutated .filter((e) => e.target !== document.head) - .forEach((e) => added = added.concat(Array.from(e.addedNodes).filter(a => a.nodeName !== "#text"))); + .forEach((e) => added = added.concat(Array.from(e.addedNodes).filter(a => a.nodeName !== "#text" && a.nodeName !== "#comment"))); + console.log(added); if (added.find(e => e.nodeName === "HEADER")) { logc("Heading added"); setup_self_button(); setup(); update_button_visibility(); } + if (added.find(e => e.classList.contains("map-card"))) { + setup_dl_link_leaderboard(); + setup_song_filter_tabs(); + highlight_user(); + add_percentage(); + } mutated = []; } let timer_id = null; diff --git a/src/main.ts b/src/main.ts index 5664ed4..8051357 100644 --- a/src/main.ts +++ b/src/main.ts @@ -36,7 +36,9 @@ function on_load_body() { mutated .filter((e) => e.target !== document.head) - .forEach((e) => added = added.concat(Array.from(e.addedNodes).filter(a => a.nodeName !== "#text"))); + .forEach((e) => added = added.concat(Array.from(e.addedNodes).filter(a => a.nodeName !== "#text" && a.nodeName !== "#comment"))); + + console.log(added); if (added.find(e => e.nodeName === "HEADER")) { log.logc("Heading added"); @@ -44,15 +46,17 @@ function on_load_body() { settings.setup(); settings.update_button_visibility(); } + if (added.find(e => e.classList.contains("map-card"))) { + page_song.setup_dl_link_leaderboard(); + page_song.setup_song_filter_tabs(); + page_song.highlight_user(); + page_song.add_percentage(); + } /* header.setup_self_pin_button(); page_user.setup_dl_link_user_site(); page_user.add_percentage(); page_user.update_wide_table_css(); - page_song.setup_dl_link_leaderboard(); - page_song.setup_song_filter_tabs(); - page_song.highlight_user(); - page_song.add_percentage(); page_songlist.setup_links_songlist(); page_songlist.setup_extra_filter_checkboxes(); page_songlist.apply_extra_filters(); diff --git a/src/pages/song.ts b/src/pages/song.ts index 0a1f23d..a8faf7d 100644 --- a/src/pages/song.ts +++ b/src/pages/song.ts @@ -71,6 +71,8 @@ export function setup_song_filter_tabs(): void { export function setup_dl_link_leaderboard(): void { if (!is_song_leaderboard_page()) { return; } + + shared.reset(); const { song_hash, details_box } = shared.get(); diff --git a/src/util/lazy.ts b/src/util/lazy.ts index c076f48..bac51f6 100644 --- a/src/util/lazy.ts +++ b/src/util/lazy.ts @@ -6,10 +6,12 @@ export class Lazy { ) { } public get(): T { - if (this.generator !== undefined) { + if (this.value === undefined) { this.value = this.generator(); - this.generator = undefined!; } return this.value!; } + public reset() { + this.value = undefined; + } } From b938c71e79e5e3e6f3bdd40b197efff782179a0e Mon Sep 17 00:00:00 2001 From: Chris Allan Date: Thu, 2 Dec 2021 13:09:19 -0800 Subject: [PATCH 04/16] Instant load; dynamic navbar class --- scoresaber.user.js | 57 +++++++++++++------------------------- src/global.ts | 2 +- src/main.ts | 68 +++++++++++++++------------------------------- 3 files changed, 42 insertions(+), 85 deletions(-) diff --git a/scoresaber.user.js b/scoresaber.user.js index c799ee8..9e86379 100644 --- a/scoresaber.user.js +++ b/scoresaber.user.js @@ -41,7 +41,6 @@ Global.script_version_reg = /\/\/\s*@version\s+([\d.]+)/; Global.user_per_page_global_leaderboard = 50; Global.user_per_page_song_leaderboard = 12; - Global.header_class = "svelte-kbfjj1"; Global.pp_weighting_factor = 0.965; function setup$3() { @@ -2953,45 +2952,27 @@ h5 > * { setup$1(); load_last_theme(); } - let mutated = []; - let added = []; - function on_load_body() { - added = []; - mutated - .filter((e) => e.target !== document.head) - .forEach((e) => added = added.concat(Array.from(e.addedNodes).filter(a => a.nodeName !== "#text" && a.nodeName !== "#comment"))); - console.log(added); - if (added.find(e => e.nodeName === "HEADER")) { - logc("Heading added"); - setup_self_button(); - setup(); - update_button_visibility(); - } - if (added.find(e => e.classList.contains("map-card"))) { - setup_dl_link_leaderboard(); - setup_song_filter_tabs(); - highlight_user(); - add_percentage(); - } - mutated = []; - } - let timer_id = null; - function onload() { - try { - on_load_head(); - on_load_body(); - console.log("onload"); - } - catch (e) { - console.error(e); - } - } const observer = new MutationObserver((mutations) => { - mutated = mutated.concat(mutations); - if (timer_id !== null) { - clearTimeout(timer_id); + for (const m of mutations) { + for (const a of m.addedNodes) { + if (!(a instanceof HTMLElement)) { + continue; + } + if (a.matches("header")) { + Global.header_class = a.classList[0]; + on_load_head(); + setup_self_button(); + setup(); + update_button_visibility(); + } + if (a.matches(".map-card")) { + setup_dl_link_leaderboard(); + setup_song_filter_tabs(); + highlight_user(); + add_percentage(); + } + } } - timer_id = setTimeout(onload, 1000); }); observer.observe(document, { childList: true, subtree: true }); diff --git a/src/global.ts b/src/global.ts index 39b3ea5..455393f 100644 --- a/src/global.ts +++ b/src/global.ts @@ -25,7 +25,7 @@ export default class Global { public static readonly user_per_page_global_leaderboard = 50; public static readonly user_per_page_song_leaderboard = 12; - public static readonly header_class = "svelte-kbfjj1"; + public static header_class: string; /** * This is the exponential factor ScoreSaber is using to weight their scores. */ diff --git a/src/main.ts b/src/main.ts index 8051357..12f264b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,4 +1,5 @@ import * as compare from "./compare"; +import g from "./global"; import * as header from "./header"; import * as page_songlist from "./pages/songlist"; import * as page_song from "./pages/song"; @@ -26,32 +27,28 @@ function on_load_head() { settings.load_last_theme(); } -let mutated = []; -let added = []; -//let modified = []; - -function on_load_body() { - added = []; - //modified = []; - - mutated - .filter((e) => e.target !== document.head) - .forEach((e) => added = added.concat(Array.from(e.addedNodes).filter(a => a.nodeName !== "#text" && a.nodeName !== "#comment"))); - - console.log(added); - - if (added.find(e => e.nodeName === "HEADER")) { - log.logc("Heading added"); - header.setup_self_button(); - settings.setup(); - settings.update_button_visibility(); - } - if (added.find(e => e.classList.contains("map-card"))) { - page_song.setup_dl_link_leaderboard(); - page_song.setup_song_filter_tabs(); - page_song.highlight_user(); - page_song.add_percentage(); +const observer = new MutationObserver((mutations) => { + for (const m of mutations) { + for (const a of m.addedNodes) { + if (!(a instanceof HTMLElement)) { + continue; + } + if (a.matches("header")) { + g.header_class = a.classList[0]; + on_load_head(); + header.setup_self_button(); + settings.setup(); + settings.update_button_visibility(); + } + if (a.matches(".map-card")) { + page_song.setup_dl_link_leaderboard(); + page_song.setup_song_filter_tabs(); + page_song.highlight_user(); + page_song.add_percentage(); + } + } } + /* header.setup_self_pin_button(); page_user.setup_dl_link_user_site(); @@ -64,26 +61,5 @@ function on_load_body() { ppgraph.setup_pp_graph(); updater.check_for_updates(); */ - mutated = []; -} - -let timer_id = null; - -function onload() { - try { - on_load_head(); - on_load_body(); - console.log("onload"); - } - catch(e) { console.error(e); } -} - -const observer = new MutationObserver((mutations) => { - mutated = mutated.concat(mutations); - - if (timer_id !== null) { - clearTimeout(timer_id); - } - timer_id = setTimeout(onload, 1000); }); observer.observe(document, {childList: true, subtree: true}); From 66b2291013ca1f5b38e9865cc7c9147fd8ba8031 Mon Sep 17 00:00:00 2001 From: Chris Allan Date: Sat, 4 Dec 2021 21:37:46 -0800 Subject: [PATCH 05/16] User header buttons --- scoresaber.user.js | 91 ++++++++++++++++++++++++++++++++++++++-------- src/compare.ts | 30 +-------------- src/env.ts | 3 +- src/main.ts | 7 +++- src/pages/user.ts | 31 +++++++++++++++- 5 files changed, 114 insertions(+), 48 deletions(-) diff --git a/scoresaber.user.js b/scoresaber.user.js index 9e86379..27bef4a 100644 --- a/scoresaber.user.js +++ b/scoresaber.user.js @@ -132,7 +132,7 @@ elem.removeChild(elem.lastChild); } } - function intor(parent, ...children) { + function intor$1(parent, ...children) { clear_children(parent); return into(parent, ...children); } @@ -252,6 +252,9 @@ return elem; } + function get_user_header() { + return check(document.querySelector(".title.player")); + } function get_navbar() { return check(document.querySelector("nav")); } @@ -261,6 +264,19 @@ function is_song_leaderboard_page() { return window.location.href.toLowerCase().startsWith(Global.scoresaber_link + "/leaderboard/"); } + function get_current_user() { + if (!is_user_page()) { + throw new Error("Not on a user page"); + } + Global._current_user = get_document_user(document); + return Global._current_user; + } + function get_document_user(doc) { + const username_elem = check(doc.querySelector(".player-link")); + const user_name = username_elem.innerText.trim(); + const user_id = Global.user_reg.exec(window.location.href)[1]; + return { id: user_id, name: user_name }; + } function get_home_user() { if (Global._home_user) { return Global._home_user; @@ -272,6 +288,10 @@ Global._home_user = JSON.parse(json); return Global._home_user; } + function set_home_user(user) { + Global._home_user = user; + localStorage.setItem("home_user", JSON.stringify(user)); + } function set_wide_table(value) { localStorage.setItem("wide_song_table", value ? "true" : "false"); } @@ -421,6 +441,21 @@ localStorage.setItem("users", JSON.stringify(Global.user_list)); } + function setup_self_pin_button() { + if (!is_user_page()) { + return; + } + const header = get_user_header(); + into(header, create("div", { + class: "button icon is-medium", + style: { cursor: "pointer" }, + data: { tooltip: "Pin this user to your navigation bar" }, + onclick() { + set_home_user(get_current_user()); + SseEvent.PinnedUserChanged.invoke(); + } + }, create("i", { class: "fas fa-thumbtack" }))); + } function setup_self_button() { var _b; let _a, _d, _a_hover = false, _d_hover = false; @@ -468,7 +503,7 @@ } function update_self_user_list() { const home_user_list_elem = check(document.getElementById("home_user_list")); - intor(home_user_list_elem, ...Object.entries(Global.user_list).map(([id, user]) => { + intor$1(home_user_list_elem, ...Object.entries(Global.user_list).map(([id, user]) => { return create("a", { class: Global.header_class, style: { @@ -1639,7 +1674,7 @@ if (!contains_version) { const new_song_hash = data.versions[data.versions.length - 1].hash; const { diff_name } = shared.get(); - intor(elem, create("div", { + intor$1(elem, create("div", { style: { marginTop: "1em", cursor: "pointer" }, class: "notification is-warning", onclick: async () => { @@ -1652,10 +1687,10 @@ } } function show_beatsaver_song_data(elem, data) { - intor(elem, create("div", { title: "Downloads" }, `${data.stats.downloads} 💾`), create("div", { title: "Upvotes" }, `${data.stats.upvotes} 👍`), create("div", { title: "Downvotes" }, `${data.stats.downvotes} 👎`), create("div", { title: "Beatmap Rating" }, `${(data.stats.score * 100).toFixed(2)}% 💯`), create("div", { title: "Beatmap Duration" }, `${number_to_timespan(data.metadata.duration)} ⏱`)); + intor$1(elem, create("div", { title: "Downloads" }, `${data.stats.downloads} 💾`), create("div", { title: "Upvotes" }, `${data.stats.upvotes} 👍`), create("div", { title: "Downvotes" }, `${data.stats.downvotes} 👎`), create("div", { title: "Beatmap Rating" }, `${(data.stats.score * 100).toFixed(2)}% 💯`), create("div", { title: "Beatmap Duration" }, `${number_to_timespan(data.metadata.duration)} ⏱`)); } function show_beastsaber_song_data(elem, data) { - intor(elem, create("div", { title: "Fun Factor" }, `${data.average_ratings.fun_factor} 😃`), create("div", { title: "Rhythm" }, `${data.average_ratings.rhythm} 🎶`), create("div", { title: "Flow" }, `${data.average_ratings.flow} 🌊`), create("div", { title: "Pattern Quality" }, `${data.average_ratings.pattern_quality} 💠`), create("div", { title: "Readability" }, `${data.average_ratings.readability} 👓`), create("div", { title: "Level Quality" }, `${data.average_ratings.level_quality} ✔️`)); + intor$1(elem, create("div", { title: "Fun Factor" }, `${data.average_ratings.fun_factor} 😃`), create("div", { title: "Rhythm" }, `${data.average_ratings.rhythm} 🎶`), create("div", { title: "Flow" }, `${data.average_ratings.flow} 🌊`), create("div", { title: "Pattern Quality" }, `${data.average_ratings.pattern_quality} 💠`), create("div", { title: "Readability" }, `${data.average_ratings.readability} 👓`), create("div", { title: "Level Quality" }, `${data.average_ratings.level_quality} ✔️`)); } function generate_song_table_row(user_id, user, song) { return create("tr", {}, create("td", { class: "picture" }), create("td", { class: "rank" }, "-"), create("td", { class: "player" }, generate_song_table_player(user_id, user)), create("td", { class: "score" }, song.score !== undefined ? format_en(song.score, 0) : "-"), create("td", { class: "timeset" }, moment(song.time).fromNow()), create("td", { class: "mods" }, song.mods !== undefined ? song.mods.toString() : "-"), create("td", { class: "percentage" }, song.accuracy ? (song.accuracy.toString() + "%") : "-"), create("td", { class: "pp" }, create("span", { class: "scoreTop ppValue" }, format_en(song.pp)), create("span", { class: "scoreTop ppLabel" }, "pp"))); @@ -1723,6 +1758,34 @@ })(); } + function setup_cache_button() { + if (!is_user_page()) { + return; + } + const header = get_user_header(); + header.style.display = "flex"; + header.style.alignItems = "center"; + const user = get_current_user(); + into(header, create("div", { + class: "button icon is-medium", + style: { cursor: "pointer" }, + data: { tooltip: Global.user_list[user.id] ? "Update score cache" : "Add user to your score cache" }, + async onclick() { + await fetch_user(get_current_user().id); + }, + }, create("i", { class: ["fas", Global.user_list[user.id] ? "fa-sync" : "fa-bookmark"] }))); + const status_elem = create("div"); + into(header, status_elem); + SseEvent.StatusInfo.register((status) => intor(status_elem, status.text)); + } + function update_wide_table_css() { + if (!is_user_page()) { + return; + } + const table = check(document.querySelector(".ranking.songs")); + table.classList.toggle("wide_song_table", get_wide_table()); + } + const themes = ["Default", "Cerulean", "Cosmo", "Cyborg", "Darkly", "Flatly", "Journal", "Litera", "Lumen", "Lux", "Materia", "Minty", "Nuclear", "Pulse", "Sandstone", "Simplex", "Slate", "Solar", "Spacelab", "Superhero", "United", @@ -1975,7 +2038,7 @@ h5 > * { return data; } - async function fetch_user(user_id, force = false) { + async function fetch_user$1(user_id, force = false) { var _a, _b; let user = Global.user_list[user_id]; if (!user) { @@ -2014,7 +2077,7 @@ h5 > * { async function fetch_all(force = false) { const users = Object.keys(Global.user_list); for (const user of users) { - await fetch_user(user, force); + await fetch_user$1(user, force); } SseEvent.StatusInfo.invoke({ text: `All users updated` }); } @@ -2036,14 +2099,6 @@ h5 > * { return { has_old_entry, has_updated }; } - function update_wide_table_css() { - if (!is_user_page()) { - return; - } - const table = check(document.querySelector(".ranking.songs")); - table.classList.toggle("wide_song_table", get_wide_table()); - } - /* src/components/SettingsDialogue.svelte generated by Svelte v3.41.0 */ function get_each_context(ctx, list, i) { @@ -2879,7 +2934,7 @@ h5 > * { return; } const status_box = create("div", {}); - SseEvent.StatusInfo.register((status) => intor(status_box, status.text)); + SseEvent.StatusInfo.register((status) => intor$1(status_box, status.text)); const set_div = create("div"); new SettingsDialogue({ target: set_div }); settings_modal = create_modal({ @@ -2965,6 +3020,10 @@ h5 > * { setup(); update_button_visibility(); } + if (a.matches(".title.player > .player-link")) { + setup_self_pin_button(); + setup_cache_button(); + } if (a.matches(".map-card")) { setup_dl_link_leaderboard(); setup_song_filter_tabs(); diff --git a/src/compare.ts b/src/compare.ts index a815e7c..9298e0b 100644 --- a/src/compare.ts +++ b/src/compare.ts @@ -1,7 +1,7 @@ import * as scoresaber from "./api/scoresaber"; import SseEvent from "./components/events"; import { IDbUser } from "./declarations/Types"; -import { get_compare_user, get_current_user, get_use_new_ss_api, get_user_header, insert_compare_feature, is_user_page, set_compare_user, get_home_user } from "./env"; +import { get_compare_user, get_current_user, get_use_new_ss_api, insert_compare_feature, is_user_page, set_compare_user, get_home_user } from "./env"; import g from "./global"; import * as usercache from "./usercache"; import { create, into, IntoElem, intor } from "./util/dom"; @@ -11,35 +11,9 @@ import { logc } from "./util/log"; import { get_song_compare_value, song_equals } from "./util/song"; export function setup_user_compare(): void { - if (!is_user_page()) { return; } - - // find the element we want to modify - - const header = get_user_header(); - header.style.display = "flex"; - header.style.alignItems = "center"; - - const user = get_current_user(); - into(header, - create("div", { - class: "button icon is-medium", - style: { cursor: "pointer" }, - data: { tooltip: g.user_list[user.id] ? "Update score cache" : "Add user to your score cache" }, - async onclick() { - await fetch_user(get_current_user().id); - }, - }, - create("i", { class: ["fas", g.user_list[user.id] ? "fa-sync" : "fa-bookmark"] }), - ) - ); - - const status_elem = create("div"); - into(header, status_elem); - SseEvent.StatusInfo.register((status) => intor(status_elem, status.text)); - g.users_elem = create("div"); insert_compare_feature(g.users_elem); - + update_user_compare_dropdown(); SseEvent.UserCacheChanged.register(update_user_compare_dropdown); diff --git a/src/env.ts b/src/env.ts index 07a8fdd..5301552 100644 --- a/src/env.ts +++ b/src/env.ts @@ -4,7 +4,7 @@ import { create, into } from "./util/dom"; import { check } from "./util/err"; export function get_user_header(): HTMLElement { - return check(document.querySelector(".player-link")); + return check(document.querySelector(".title.player")); } export function get_navbar(): HTMLDivElement { @@ -20,7 +20,6 @@ export function is_song_leaderboard_page(): boolean { } export function get_current_user(): IUser { - if (g._current_user) { return g._current_user; } if (!is_user_page()) { throw new Error("Not on a user page"); } g._current_user = get_document_user(document); diff --git a/src/main.ts b/src/main.ts index 12f264b..3d93086 100644 --- a/src/main.ts +++ b/src/main.ts @@ -40,6 +40,12 @@ const observer = new MutationObserver((mutations) => { settings.setup(); settings.update_button_visibility(); } + // Player Header + if (a.matches(".title.player > .player-link")) { + header.setup_self_pin_button(); + page_user.setup_cache_button(); + } + // Map Page if (a.matches(".map-card")) { page_song.setup_dl_link_leaderboard(); page_song.setup_song_filter_tabs(); @@ -50,7 +56,6 @@ const observer = new MutationObserver((mutations) => { } /* - header.setup_self_pin_button(); page_user.setup_dl_link_user_site(); page_user.add_percentage(); page_user.update_wide_table_css(); diff --git a/src/pages/user.ts b/src/pages/user.ts index 45897ac..02e844e 100644 --- a/src/pages/user.ts +++ b/src/pages/user.ts @@ -1,5 +1,6 @@ import * as beatsaver from "../api/beatsaver"; -import { BMButton, BMButtonHelp, bmvar, get_wide_table, is_user_page, Pages } from "../env"; +import SseEvent from "../components/events"; +import { BMButton, BMButtonHelp, bmvar, get_current_user, get_user_header, get_wide_table, is_user_page, Pages } from "../env"; import g from "../global"; import { as_fragment, create, into } from "../util/dom"; import { check } from "../util/err"; @@ -9,6 +10,34 @@ import QuickButton from "../components/QuickButton.svelte"; const PAGE: Pages = "user"; +export function setup_cache_button(): void { + if (!is_user_page()) { return; } + + // find the element we want to modify + + const header = get_user_header(); + header.style.display = "flex"; + header.style.alignItems = "center"; + + const user = get_current_user(); + into(header, + create("div", { + class: "button icon is-medium", + style: { cursor: "pointer" }, + data: { tooltip: g.user_list[user.id] ? "Update score cache" : "Add user to your score cache" }, + async onclick() { + await fetch_user(get_current_user().id); + }, + }, + create("i", { class: ["fas", g.user_list[user.id] ? "fa-sync" : "fa-bookmark"] }), + ) + ); + + const status_elem = create("div"); + into(header, status_elem); + SseEvent.StatusInfo.register((status) => intor(status_elem, status.text)); +} + export function setup_dl_link_user_site(): void { if (!is_user_page()) { return; } From fe59cef1289cdc49860bbe455a2d441b6fd7e58a Mon Sep 17 00:00:00 2001 From: Chris Allan Date: Sun, 12 Dec 2021 16:53:29 -0800 Subject: [PATCH 06/16] Fix score fetch --- scoresaber.user.js | 344 ++++++++++++++++++++++----------------------- src/compare.ts | 4 +- src/pages/user.ts | 3 +- 3 files changed, 176 insertions(+), 175 deletions(-) diff --git a/scoresaber.user.js b/scoresaber.user.js index 27bef4a..1efcc73 100644 --- a/scoresaber.user.js +++ b/scoresaber.user.js @@ -132,7 +132,7 @@ elem.removeChild(elem.lastChild); } } - function intor$1(parent, ...children) { + function intor(parent, ...children) { clear_children(parent); return into(parent, ...children); } @@ -503,7 +503,7 @@ } function update_self_user_list() { const home_user_list_elem = check(document.getElementById("home_user_list")); - intor$1(home_user_list_elem, ...Object.entries(Global.user_list).map(([id, user]) => { + intor(home_user_list_elem, ...Object.entries(Global.user_list).map(([id, user]) => { return create("a", { class: Global.header_class, style: { @@ -1674,7 +1674,7 @@ if (!contains_version) { const new_song_hash = data.versions[data.versions.length - 1].hash; const { diff_name } = shared.get(); - intor$1(elem, create("div", { + intor(elem, create("div", { style: { marginTop: "1em", cursor: "pointer" }, class: "notification is-warning", onclick: async () => { @@ -1687,10 +1687,10 @@ } } function show_beatsaver_song_data(elem, data) { - intor$1(elem, create("div", { title: "Downloads" }, `${data.stats.downloads} 💾`), create("div", { title: "Upvotes" }, `${data.stats.upvotes} 👍`), create("div", { title: "Downvotes" }, `${data.stats.downvotes} 👎`), create("div", { title: "Beatmap Rating" }, `${(data.stats.score * 100).toFixed(2)}% 💯`), create("div", { title: "Beatmap Duration" }, `${number_to_timespan(data.metadata.duration)} ⏱`)); + intor(elem, create("div", { title: "Downloads" }, `${data.stats.downloads} 💾`), create("div", { title: "Upvotes" }, `${data.stats.upvotes} 👍`), create("div", { title: "Downvotes" }, `${data.stats.downvotes} 👎`), create("div", { title: "Beatmap Rating" }, `${(data.stats.score * 100).toFixed(2)}% 💯`), create("div", { title: "Beatmap Duration" }, `${number_to_timespan(data.metadata.duration)} ⏱`)); } function show_beastsaber_song_data(elem, data) { - intor$1(elem, create("div", { title: "Fun Factor" }, `${data.average_ratings.fun_factor} 😃`), create("div", { title: "Rhythm" }, `${data.average_ratings.rhythm} 🎶`), create("div", { title: "Flow" }, `${data.average_ratings.flow} 🌊`), create("div", { title: "Pattern Quality" }, `${data.average_ratings.pattern_quality} 💠`), create("div", { title: "Readability" }, `${data.average_ratings.readability} 👓`), create("div", { title: "Level Quality" }, `${data.average_ratings.level_quality} ✔️`)); + intor(elem, create("div", { title: "Fun Factor" }, `${data.average_ratings.fun_factor} 😃`), create("div", { title: "Rhythm" }, `${data.average_ratings.rhythm} 🎶`), create("div", { title: "Flow" }, `${data.average_ratings.flow} 🌊`), create("div", { title: "Pattern Quality" }, `${data.average_ratings.pattern_quality} 💠`), create("div", { title: "Readability" }, `${data.average_ratings.readability} 👓`), create("div", { title: "Level Quality" }, `${data.average_ratings.level_quality} ✔️`)); } function generate_song_table_row(user_id, user, song) { return create("tr", {}, create("td", { class: "picture" }), create("td", { class: "rank" }, "-"), create("td", { class: "player" }, generate_song_table_player(user_id, user)), create("td", { class: "score" }, song.score !== undefined ? format_en(song.score, 0) : "-"), create("td", { class: "timeset" }, moment(song.time).fromNow()), create("td", { class: "mods" }, song.mods !== undefined ? song.mods.toString() : "-"), create("td", { class: "percentage" }, song.accuracy ? (song.accuracy.toString() + "%") : "-"), create("td", { class: "pp" }, create("span", { class: "scoreTop ppValue" }, format_en(song.pp)), create("span", { class: "scoreTop ppLabel" }, "pp"))); @@ -1758,6 +1758,172 @@ })(); } + class Limiter { + constructor() { + this.ratelimit_reset = undefined; + this.ratelimit_remaining = undefined; + } + async wait() { + const now = unix_timestamp(); + if (this.ratelimit_reset === undefined || now > this.ratelimit_reset) { + this.ratelimit_reset = undefined; + this.ratelimit_remaining = undefined; + return; + } + if (this.ratelimit_remaining === 0) { + const sleepTime = (this.ratelimit_reset - now); + console.log(`Waiting for cloudflare rate limiter... ${sleepTime}sec`); + await sleep(sleepTime * 1000); + this.ratelimit_remaining = this.ratelimit_limit; + this.ratelimit_reset = undefined; + } + } + setLimitData(remaining, reset, limit) { + this.ratelimit_remaining = remaining; + this.ratelimit_reset = reset; + this.ratelimit_limit = limit; + } + } + async function sleep(timeout) { + return new Promise(resolve => setTimeout(resolve, timeout)); + } + function unix_timestamp() { + return Math.round((new Date()).getTime() / 1000); + } + + const SCORESABER_LINK = "https://new.scoresaber.com/api"; + const API_LIMITER = new Limiter(); + async function get_user_recent_songs_dynamic(user_id, page) { + logc(`Fetching user ${user_id} page ${page}`); + return get_user_recent_songs_new_api_wrap(user_id, page); + } + async function get_user_recent_songs_new_api_wrap(user_id, page) { + const recent_songs = await get_user_recent_songs(user_id, page); + if (!recent_songs) { + return { + meta: { was_last_page: true }, + songs: [] + }; + } + return { + meta: { + was_last_page: recent_songs.scores.length < 8 + }, + songs: recent_songs.scores.map(s => [String(s.leaderboardId), { + time: s.timeSet, + pp: s.pp, + accuracy: s.maxScore !== 0 ? round2((s.unmodififiedScore / s.maxScore) * 100) : undefined, + score: s.score, + mods: parse_mods(s.mods) + }]) + }; + } + async function get_user_recent_songs(user_id, page) { + const req = await auto_fetch_retry(`${SCORESABER_LINK}/player/${user_id}/scores/recent/${page}`); + if (req.status === 404) { + return null; + } + const data = await req.json(); + return sanitize_song_ids(data); + } + async function get_user_info_basic(user_id) { + const req = await auto_fetch_retry(`${SCORESABER_LINK}/player/${user_id}/basic`); + const data = await req.json(); + return sanitize_player_ids(data); + } + async function auto_fetch_retry(url) { + const MAX_RETRIES = 20; + const SLEEP_WAIT = 5000; + for (let retries = MAX_RETRIES; retries >= 0; retries--) { + await API_LIMITER.wait(); + const response = await fetch(url); + const remaining = Number(response.headers.get("x-ratelimit-remaining")); + const reset = Number(response.headers.get("x-ratelimit-reset")); + const limit = Number(response.headers.get("x-ratelimit-limit")); + API_LIMITER.setLimitData(remaining, reset, limit); + if (response.status === 429) { + await sleep(SLEEP_WAIT); + } + else { + return response; + } + } + throw new Error("Can't fetch data from new.scoresaber."); + } + function sanitize_player_ids(data) { + data.playerInfo.playerId = String(data.playerInfo.playerId); + return data; + } + function sanitize_song_ids(data) { + for (const s of data.scores) { + s.scoreId = String(s.scoreId); + s.leaderboardId = String(s.leaderboardId); + s.playerId = String(s.playerId); + } + return data; + } + + async function fetch_user(user_id, force = false) { + var _a, _b; + let user = Global.user_list[user_id]; + if (!user) { + user = { + name: "User" + user_id, + songs: {} + }; + Global.user_list[user_id] = user; + } + let page_max = undefined; + let user_name = user.name; + let updated = false; + SseEvent.StatusInfo.invoke({ text: `Fetching user ${user_name}` }); + if (get_use_new_ss_api()) { + const user_data = await get_user_info_basic(user_id); + user_name = user_data.playerInfo.playerName; + } + for (let page = 1;; page++) { + SseEvent.StatusInfo.invoke({ text: `Updating user ${user_name} page ${page}/${(page_max !== null && page_max !== void 0 ? page_max : "?")}` }); + const recent_songs = await get_user_recent_songs_dynamic(user_id, page); + const { has_old_entry, has_updated } = process_user_page(recent_songs.songs, user); + updated = updated || has_updated; + page_max = (_a = recent_songs.meta.max_pages) !== null && _a !== void 0 ? _a : page_max; + user_name = (_b = recent_songs.meta.user_name) !== null && _b !== void 0 ? _b : user_name; + if ((!force && has_old_entry) || recent_songs.meta.was_last_page) { + break; + } + } + user.name = user_name !== null && user_name !== void 0 ? user_name : user.name; + if (updated) { + save(); + } + SseEvent.StatusInfo.invoke({ text: `User ${user_name} updated` }); + SseEvent.UserCacheChanged.invoke(); + } + async function fetch_all(force = false) { + const users = Object.keys(Global.user_list); + for (const user of users) { + await fetch_user(user, force); + } + SseEvent.StatusInfo.invoke({ text: `All users updated` }); + } + function process_user_page(songs, user) { + let has_old_entry = false; + let has_updated = false; + for (const [song_id, song] of songs) { + const song_old = user.songs[song_id]; + if (!song_old || !song_equals(song_old, song)) { + logc("Updated: ", song_old, song); + has_updated = true; + } + else { + logc("Old found: ", song); + has_old_entry = true; + } + user.songs[song_id] = song; + } + return { has_old_entry, has_updated }; + } + function setup_cache_button() { if (!is_user_page()) { return; @@ -1933,172 +2099,6 @@ h5 > * { into(document.head, create("link", { rel: "stylesheet", href: "https://cdn.jsdelivr.net/npm/bulma-checkradio/dist/css/bulma-checkradio.min.css" })); } - class Limiter { - constructor() { - this.ratelimit_reset = undefined; - this.ratelimit_remaining = undefined; - } - async wait() { - const now = unix_timestamp(); - if (this.ratelimit_reset === undefined || now > this.ratelimit_reset) { - this.ratelimit_reset = undefined; - this.ratelimit_remaining = undefined; - return; - } - if (this.ratelimit_remaining === 0) { - const sleepTime = (this.ratelimit_reset - now); - console.log(`Waiting for cloudflare rate limiter... ${sleepTime}sec`); - await sleep(sleepTime * 1000); - this.ratelimit_remaining = this.ratelimit_limit; - this.ratelimit_reset = undefined; - } - } - setLimitData(remaining, reset, limit) { - this.ratelimit_remaining = remaining; - this.ratelimit_reset = reset; - this.ratelimit_limit = limit; - } - } - async function sleep(timeout) { - return new Promise(resolve => setTimeout(resolve, timeout)); - } - function unix_timestamp() { - return Math.round((new Date()).getTime() / 1000); - } - - const SCORESABER_LINK = "https://new.scoresaber.com/api"; - const API_LIMITER = new Limiter(); - async function get_user_recent_songs_dynamic(user_id, page) { - logc(`Fetching user ${user_id} page ${page}`); - return get_user_recent_songs_new_api_wrap(user_id, page); - } - async function get_user_recent_songs_new_api_wrap(user_id, page) { - const recent_songs = await get_user_recent_songs(user_id, page); - if (!recent_songs) { - return { - meta: { was_last_page: true }, - songs: [] - }; - } - return { - meta: { - was_last_page: recent_songs.scores.length < 8 - }, - songs: recent_songs.scores.map(s => [String(s.leaderboardId), { - time: s.timeSet, - pp: s.pp, - accuracy: s.maxScore !== 0 ? round2((s.unmodififiedScore / s.maxScore) * 100) : undefined, - score: s.score, - mods: parse_mods(s.mods) - }]) - }; - } - async function get_user_recent_songs(user_id, page) { - const req = await auto_fetch_retry(`${SCORESABER_LINK}/player/${user_id}/scores/recent/${page}`); - if (req.status === 404) { - return null; - } - const data = await req.json(); - return sanitize_song_ids(data); - } - async function get_user_info_basic(user_id) { - const req = await auto_fetch_retry(`${SCORESABER_LINK}/player/${user_id}/basic`); - const data = await req.json(); - return sanitize_player_ids(data); - } - async function auto_fetch_retry(url) { - const MAX_RETRIES = 20; - const SLEEP_WAIT = 5000; - for (let retries = MAX_RETRIES; retries >= 0; retries--) { - await API_LIMITER.wait(); - const response = await fetch(url); - const remaining = Number(response.headers.get("x-ratelimit-remaining")); - const reset = Number(response.headers.get("x-ratelimit-reset")); - const limit = Number(response.headers.get("x-ratelimit-limit")); - API_LIMITER.setLimitData(remaining, reset, limit); - if (response.status === 429) { - await sleep(SLEEP_WAIT); - } - else { - return response; - } - } - throw new Error("Can't fetch data from new.scoresaber."); - } - function sanitize_player_ids(data) { - data.playerInfo.playerId = String(data.playerInfo.playerId); - return data; - } - function sanitize_song_ids(data) { - for (const s of data.scores) { - s.scoreId = String(s.scoreId); - s.leaderboardId = String(s.leaderboardId); - s.playerId = String(s.playerId); - } - return data; - } - - async function fetch_user$1(user_id, force = false) { - var _a, _b; - let user = Global.user_list[user_id]; - if (!user) { - user = { - name: "User" + user_id, - songs: {} - }; - Global.user_list[user_id] = user; - } - let page_max = undefined; - let user_name = user.name; - let updated = false; - SseEvent.StatusInfo.invoke({ text: `Fetching user ${user_name}` }); - if (get_use_new_ss_api()) { - const user_data = await get_user_info_basic(user_id); - user_name = user_data.playerInfo.playerName; - } - for (let page = 1;; page++) { - SseEvent.StatusInfo.invoke({ text: `Updating user ${user_name} page ${page}/${(page_max !== null && page_max !== void 0 ? page_max : "?")}` }); - const recent_songs = await get_user_recent_songs_dynamic(user_id, page); - const { has_old_entry, has_updated } = process_user_page(recent_songs.songs, user); - updated = updated || has_updated; - page_max = (_a = recent_songs.meta.max_pages) !== null && _a !== void 0 ? _a : page_max; - user_name = (_b = recent_songs.meta.user_name) !== null && _b !== void 0 ? _b : user_name; - if ((!force && has_old_entry) || recent_songs.meta.was_last_page) { - break; - } - } - user.name = user_name !== null && user_name !== void 0 ? user_name : user.name; - if (updated) { - save(); - } - SseEvent.StatusInfo.invoke({ text: `User ${user_name} updated` }); - SseEvent.UserCacheChanged.invoke(); - } - async function fetch_all(force = false) { - const users = Object.keys(Global.user_list); - for (const user of users) { - await fetch_user$1(user, force); - } - SseEvent.StatusInfo.invoke({ text: `All users updated` }); - } - function process_user_page(songs, user) { - let has_old_entry = false; - let has_updated = false; - for (const [song_id, song] of songs) { - const song_old = user.songs[song_id]; - if (!song_old || !song_equals(song_old, song)) { - logc("Updated: ", song_old, song); - has_updated = true; - } - else { - logc("Old found: ", song); - has_old_entry = true; - } - user.songs[song_id] = song; - } - return { has_old_entry, has_updated }; - } - /* src/components/SettingsDialogue.svelte generated by Svelte v3.41.0 */ function get_each_context(ctx, list, i) { @@ -2934,7 +2934,7 @@ h5 > * { return; } const status_box = create("div", {}); - SseEvent.StatusInfo.register((status) => intor$1(status_box, status.text)); + SseEvent.StatusInfo.register((status) => intor(status_box, status.text)); const set_div = create("div"); new SettingsDialogue({ target: set_div }); settings_modal = create_modal({ diff --git a/src/compare.ts b/src/compare.ts index 9298e0b..15d6f3a 100644 --- a/src/compare.ts +++ b/src/compare.ts @@ -4,7 +4,7 @@ import { IDbUser } from "./declarations/Types"; import { get_compare_user, get_current_user, get_use_new_ss_api, insert_compare_feature, is_user_page, set_compare_user, get_home_user } from "./env"; import g from "./global"; import * as usercache from "./usercache"; -import { create, into, IntoElem, intor } from "./util/dom"; +import { create, IntoElem, intor } from "./util/dom"; import { check } from "./util/err"; import { format_en, round2 } from "./util/format"; import { logc } from "./util/log"; @@ -146,7 +146,7 @@ export function update_user_compare_songtable(other_user?: string): void { } } -async function fetch_user(user_id: string, force: boolean = false): Promise { +export async function fetch_user(user_id: string, force: boolean = false): Promise { let user = g.user_list[user_id]; if (!user) { user = { diff --git a/src/pages/user.ts b/src/pages/user.ts index 02e844e..fb17d98 100644 --- a/src/pages/user.ts +++ b/src/pages/user.ts @@ -1,8 +1,9 @@ import * as beatsaver from "../api/beatsaver"; import SseEvent from "../components/events"; import { BMButton, BMButtonHelp, bmvar, get_current_user, get_user_header, get_wide_table, is_user_page, Pages } from "../env"; +import { fetch_user } from "../compare"; import g from "../global"; -import { as_fragment, create, into } from "../util/dom"; +import { as_fragment, create, into, intor } from "../util/dom"; import { check } from "../util/err"; import { number_invariant } from "../util/format"; import { calculate_max_score, get_notes_count, get_song_hash_from_text, parse_score_bottom } from "../util/song"; From 54d8ea56855cfeeb5a602533d0b44afc2b6f5c6f Mon Sep 17 00:00:00 2001 From: Chris Allan Date: Sun, 12 Dec 2021 17:29:10 -0800 Subject: [PATCH 07/16] User page add percentage --- scoresaber.user.js | 52 ++++++++++++++++++++++++++++++++--- src/main.ts | 6 ++++- src/pages/user.ts | 67 ++++++++++++++++++++++------------------------ src/util/song.ts | 22 +++++++-------- 4 files changed, 96 insertions(+), 51 deletions(-) diff --git a/scoresaber.user.js b/scoresaber.user.js index 1efcc73..d0d23a6 100644 --- a/scoresaber.user.js +++ b/scoresaber.user.js @@ -748,6 +748,13 @@ return undefined; return modarr; } + function parse_score_bottom(text) { + let score = undefined; + const accuracy = undefined; + const mods = undefined; + score = number_invariant(text); + return { score, accuracy, mods }; + } function get_notes_count(diff_name, characteristic, version) { var _a; if (diff_name === "Expert+") @@ -1608,7 +1615,7 @@ } elements.sort((a, b) => { const [sa, sb] = get_song_compare_value(a[0], b[0]); return sb - sa; }); elements.forEach(x => score_table.appendChild(x[1])); - add_percentage(); + add_percentage$1(); } function load_all() { if (!Global.song_table_backup) { @@ -1619,7 +1626,7 @@ table.removeChild(score_table); score_table = table.appendChild(Global.song_table_backup); Global.song_table_backup = undefined; - add_percentage(); + add_percentage$1(); } tab_list_content.appendChild(generate_tab("All Scores", "all_scores_tab", load_all, true, true)); tab_list_content.appendChild(generate_tab("Friends", "friends_tab", load_friends, false, false)); @@ -1723,7 +1730,7 @@ element.parentElement.parentElement.style.backgroundColor = "var(--color-highlight)"; } } - function add_percentage() { + function add_percentage$1() { if (!is_song_leaderboard_page()) { return; } @@ -1951,6 +1958,40 @@ const table = check(document.querySelector(".ranking.songs")); table.classList.toggle("wide_song_table", get_wide_table()); } + function add_percentage(row) { + if (!is_user_page()) { + return; + } + const image_link = check(row.querySelector("img.song-image")).src; + const song_hash = get_song_hash_from_text(image_link); + if (!song_hash) { + return; + } + const score_column = row.querySelector(".stat.acc"); + if (score_column) { + return; + } + (async () => { + const data = await get_data_by_hash(song_hash); + if (!data) + return; + const diff_name = check(row.querySelector(".tag")).title; + const version = data.versions.find((v) => v.hash === song_hash.toLowerCase()); + if (!diff_name || !version) + return; + const notes = get_notes_count(diff_name, "Standard", version); + if (notes < 0) + return; + const max_score = calculate_max_score(notes); + const user_score = check(row.querySelector(".scoreInfo > div:last-of-type > .stat")).innerText; + const { score } = parse_score_bottom(user_score); + if (score !== undefined) { + const calculated_percentage = (100 * score / max_score).toFixed(2); + const score_row = row.querySelector(".scoreInfo > div:last-of-type"); + score_row.insertBefore(create("span", { "class": `stat acc ${score_row.classList[0]}` }, `${calculated_percentage}%`), score_row.children[0]); + } + })(); + } const themes = ["Default", "Cerulean", "Cosmo", "Cyborg", "Darkly", "Flatly", "Journal", "Litera", "Lumen", "Lux", "Materia", "Minty", "Nuclear", "Pulse", @@ -3024,11 +3065,14 @@ h5 > * { setup_self_pin_button(); setup_cache_button(); } + if (a.matches(".table-item")) { + add_percentage(a); + } if (a.matches(".map-card")) { setup_dl_link_leaderboard(); setup_song_filter_tabs(); highlight_user(); - add_percentage(); + add_percentage$1(); } } } diff --git a/src/main.ts b/src/main.ts index 3d93086..13cf61b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -45,6 +45,11 @@ const observer = new MutationObserver((mutations) => { header.setup_self_pin_button(); page_user.setup_cache_button(); } + + if (a.matches(".table-item")) { + page_user.add_percentage(a); + } + // Map Page if (a.matches(".map-card")) { page_song.setup_dl_link_leaderboard(); @@ -57,7 +62,6 @@ const observer = new MutationObserver((mutations) => { /* page_user.setup_dl_link_user_site(); - page_user.add_percentage(); page_user.update_wide_table_css(); page_songlist.setup_links_songlist(); page_songlist.setup_extra_filter_checkboxes(); diff --git a/src/pages/user.ts b/src/pages/user.ts index fb17d98..61d2a87 100644 --- a/src/pages/user.ts +++ b/src/pages/user.ts @@ -95,45 +95,42 @@ export function update_wide_table_css(): void { // ** Link util ** -export function add_percentage(): void { - // TODO - return; +export function add_percentage(row: HTMLElement): void { if (!is_user_page()) { return; } - // find the table we want to modify - const table = check(document.querySelector("table.ranking.songs")); - const table_row = table.querySelectorAll("tbody tr"); - for (const row of table_row) { - const image_link = check(row.querySelector("th.song img")).src; - const song_hash = get_song_hash_from_text(image_link); + const image_link = check(row.querySelector("img.song-image")).src; + const song_hash = get_song_hash_from_text(image_link); - if (!song_hash) { - return; - } + if (!song_hash) { + return; + } - const score_column = check(row.querySelector(`th.score`)); - // skip rows with percentage from ScoreSaber - if (!score_column.innerText || score_column.innerText.includes("%")) { continue; } + const score_column = row.querySelector(".stat.acc"); + // skip rows with percentage from ScoreSaber + if (score_column) { return; } - (async () => { - const data = await beatsaver.get_data_by_hash(song_hash); - if (!data) - return; - const song_column = check(row.querySelector(`th.song`)); - const diff_name = check(song_column.querySelector(`span > span`)).innerText; - const version = data.versions.find((v) => v.hash === song_hash.toLowerCase()); - if (!diff_name || !version) - return; - const notes = get_notes_count(diff_name, "Standard", version); - if (notes < 0) + (async () => { + const data = await beatsaver.get_data_by_hash(song_hash); + if (!data) + return; + const diff_name = check(row.querySelector(".tag")).title; // Other languages? + const version = data.versions.find((v) => v.hash === song_hash.toLowerCase()); + if (!diff_name || !version) return; - const max_score = calculate_max_score(notes); - const user_score = check(score_column.querySelector(".scoreBottom")).innerText; - const { score } = parse_score_bottom(user_score); - if (score !== undefined) { - const calculated_percentage = (100 * score / max_score).toFixed(2); - check(score_column.querySelector(".ppWeightedValue")).innerHTML = `(${calculated_percentage}%)`; - } - })(); - } + const notes = get_notes_count(diff_name, "Standard", version); + if (notes < 0) + return; + const max_score = calculate_max_score(notes); + const user_score = check(row.querySelector(".scoreInfo > div:last-of-type > .stat")).innerText; + const { score } = parse_score_bottom(user_score); + if (score !== undefined) { + const calculated_percentage = (100 * score / max_score).toFixed(2); + const score_row = row.querySelector(".scoreInfo > div:last-of-type"); + score_row.insertBefore( + create("span", {"class": `stat acc ${score_row.classList[0]}`}, `${calculated_percentage}%`), + score_row.children[0] + ); + //check(score_column.querySelector(".ppWeightedValue")).innerHTML = `(${calculated_percentage}%)`; + } + })(); } diff --git a/src/util/song.ts b/src/util/song.ts index 256f7fd..1767db6 100644 --- a/src/util/song.ts +++ b/src/util/song.ts @@ -120,17 +120,17 @@ export function parse_mods(mods: string): string[] | undefined { export function parse_score_bottom(text: string): { score?: number, accuracy?: number, mods?: string[] } { let score = undefined; - let accuracy = undefined; - let mods = undefined; - const score_res = check(g.score_reg.exec(text)); - if (score_res[1] === "score") { - score = number_invariant(score_res[2]); - } else if (score_res[1] === "accuracy") { - accuracy = Number(score_res[2]); - } - if (score_res[4]) { - mods = parse_mods(score_res[4]); - } + const accuracy = undefined; + const mods = undefined; +// const score_res = check(g.score_reg.exec(text)); +// if (score_res[1] === "score") { + score = number_invariant(text); +// } else if (score_res[1] === "accuracy") { +// accuracy = Number(score_res[2]); +// } +// if (score_res[4]) { +// mods = parse_mods(score_res[4]); +// } return { score, accuracy, mods }; } From 1a9eb573bb6589ceb40ee7edebaf13b2652f28b9 Mon Sep 17 00:00:00 2001 From: Chris Allan Date: Sun, 12 Dec 2021 22:24:11 -0800 Subject: [PATCH 08/16] Calculate percentage on leaderboards --- scoresaber.user.js | 338 ++++++++++++++++++++---------------------- src/api/scoresaber.ts | 5 + src/main.ts | 6 +- src/pages/song.ts | 144 +++++++++++------- 4 files changed, 265 insertions(+), 228 deletions(-) diff --git a/scoresaber.user.js b/scoresaber.user.js index d0d23a6..fbdcaff 100644 --- a/scoresaber.user.js +++ b/scoresaber.user.js @@ -772,16 +772,6 @@ return note_score * (9 + (notes - 5) * 4); return note_score * (41 + (notes - 13) * 8); } - function diff_name_to_value(name) { - switch (name) { - case "Easy": return 1; - case "Medium": return 3; - case "Hard": return 5; - case "Expert": return 7; - case "ExpertPlus": return 9; - default: return -1; - } - } const api_cache = new SessionCache("saver"); async function get_data_by_hash(song_hash) { @@ -799,32 +789,114 @@ return undefined; } } - async function get_scoresaber_data_by_hash(song_hash, diff_name) { - try { - const diff_value = diff_name === undefined ? 0 : diff_name_to_value(diff_name); - const data_str = await fetch2(`https://beatsaver.com/api/scores/${song_hash}/0?difficulty=${diff_value}&gameMode=0`); - const data = JSON.parse(data_str); - return data; + + class Limiter { + constructor() { + this.ratelimit_reset = undefined; + this.ratelimit_remaining = undefined; } - catch (err) { - logc("Failed to download song data", err); - return undefined; + async wait() { + const now = unix_timestamp(); + if (this.ratelimit_reset === undefined || now > this.ratelimit_reset) { + this.ratelimit_reset = undefined; + this.ratelimit_remaining = undefined; + return; + } + if (this.ratelimit_remaining === 0) { + const sleepTime = (this.ratelimit_reset - now); + console.log(`Waiting for cloudflare rate limiter... ${sleepTime}sec`); + await sleep(sleepTime * 1000); + this.ratelimit_remaining = this.ratelimit_limit; + this.ratelimit_reset = undefined; + } } + setLimitData(remaining, reset, limit) { + this.ratelimit_remaining = remaining; + this.ratelimit_reset = reset; + this.ratelimit_limit = limit; + } + } + async function sleep(timeout) { + return new Promise(resolve => setTimeout(resolve, timeout)); + } + function unix_timestamp() { + return Math.round((new Date()).getTime() / 1000); } - class Lazy { - constructor(generator) { - this.generator = generator; + const SCORESABER_LINK = "https://new.scoresaber.com/api"; + const API_LIMITER = new Limiter(); + async function get_user_recent_songs_dynamic(user_id, page) { + logc(`Fetching user ${user_id} page ${page}`); + return get_user_recent_songs_new_api_wrap(user_id, page); + } + async function get_leaderboard_info(leaderboard_id) { + const req = await auto_fetch_retry(`https://scoresaber.com/api/leaderboard/by-id/${leaderboard_id}/info`); + return await req.json(); + } + async function get_user_recent_songs_new_api_wrap(user_id, page) { + const recent_songs = await get_user_recent_songs(user_id, page); + if (!recent_songs) { + return { + meta: { was_last_page: true }, + songs: [] + }; } - get() { - if (this.value === undefined) { - this.value = this.generator(); + return { + meta: { + was_last_page: recent_songs.scores.length < 8 + }, + songs: recent_songs.scores.map(s => [String(s.leaderboardId), { + time: s.timeSet, + pp: s.pp, + accuracy: s.maxScore !== 0 ? round2((s.unmodififiedScore / s.maxScore) * 100) : undefined, + score: s.score, + mods: parse_mods(s.mods) + }]) + }; + } + async function get_user_recent_songs(user_id, page) { + const req = await auto_fetch_retry(`${SCORESABER_LINK}/player/${user_id}/scores/recent/${page}`); + if (req.status === 404) { + return null; + } + const data = await req.json(); + return sanitize_song_ids(data); + } + async function get_user_info_basic(user_id) { + const req = await auto_fetch_retry(`${SCORESABER_LINK}/player/${user_id}/basic`); + const data = await req.json(); + return sanitize_player_ids(data); + } + async function auto_fetch_retry(url) { + const MAX_RETRIES = 20; + const SLEEP_WAIT = 5000; + for (let retries = MAX_RETRIES; retries >= 0; retries--) { + await API_LIMITER.wait(); + const response = await fetch(url); + const remaining = Number(response.headers.get("x-ratelimit-remaining")); + const reset = Number(response.headers.get("x-ratelimit-reset")); + const limit = Number(response.headers.get("x-ratelimit-limit")); + API_LIMITER.setLimitData(remaining, reset, limit); + if (response.status === 429) { + await sleep(SLEEP_WAIT); + } + else { + return response; } - return this.value; } - reset() { - this.value = undefined; + throw new Error("Can't fetch data from new.scoresaber."); + } + function sanitize_player_ids(data) { + data.playerInfo.playerId = String(data.playerInfo.playerId); + return data; + } + function sanitize_song_ids(data) { + for (const s of data.scores) { + s.scoreId = String(s.scoreId); + s.leaderboardId = String(s.leaderboardId); + s.playerId = String(s.playerId); } + return data; } function noop() { } @@ -1586,14 +1658,28 @@ } const PAGE = "song"; - const shared = new Lazy(() => { - var _a; - let details_box = check(document.querySelector(".title.is-5")); - details_box = check(details_box.parentElement.parentElement.parentElement); - const song_hash = get_song_hash_from_text(details_box.innerHTML); - const diff_name = (_a = document.querySelector(`div.tabs a.selected`)) === null || _a === void 0 ? void 0 : _a.innerText; - return { song_hash, details_box, diff_name }; - }); + class shared { + static async get() { + if (this._current_page === window.location.pathname) { + const song_hash = this.song_hash, details_box = this.details_box, diff_name = this.diff_name, game_mode = this.game_mode; + return { song_hash, details_box, diff_name, game_mode }; + } + this.details_box = check(document.querySelector(".title.is-5").parentElement.parentElement.parentElement); + const id = window.location.pathname.split('/').pop(); + if (this._leaderboard_info[id] === undefined) { + console.log(`Refresh, ${this._current_href} !== ${window.location.href} ${this.song_hash}`); + this._leaderboard_info[id] = get_leaderboard_info(id); + } + const leaderboard_info = await this._leaderboard_info[id]; + this.song_hash = leaderboard_info.songHash.toLowerCase(); + this.diff_name = leaderboard_info.difficulty.difficultyRaw.split("_")[1]; + this.game_mode = leaderboard_info.difficulty.gameMode; + this._current_page = window.location.pathname; + const song_hash = this.song_hash, details_box = this.details_box, diff_name = this.diff_name, game_mode = this.game_mode; + return { song_hash, details_box, diff_name, game_mode }; + } + } + shared._leaderboard_info = {}; function setup_song_filter_tabs() { if (!is_song_leaderboard_page()) { return; @@ -1615,7 +1701,6 @@ } elements.sort((a, b) => { const [sa, sb] = get_song_compare_value(a[0], b[0]); return sb - sa; }); elements.forEach(x => score_table.appendChild(x[1])); - add_percentage$1(); } function load_all() { if (!Global.song_table_backup) { @@ -1626,17 +1711,15 @@ table.removeChild(score_table); score_table = table.appendChild(Global.song_table_backup); Global.song_table_backup = undefined; - add_percentage$1(); } tab_list_content.appendChild(generate_tab("All Scores", "all_scores_tab", load_all, true, true)); tab_list_content.appendChild(generate_tab("Friends", "friends_tab", load_friends, false, false)); } - function setup_dl_link_leaderboard() { + async function setup_dl_link_leaderboard() { if (!is_song_leaderboard_page()) { return; } - shared.reset(); - const { song_hash, details_box } = shared.get(); + const { song_hash, details_box } = await shared.get(); const tool_strip = create("div", { id: "leaderboard_tool_strip", style: { @@ -1676,16 +1759,16 @@ show_beastsaber_song_data(beastsaber_box, data2); })(); } - function show_song_warning(elem, song_hash, data) { + async function show_song_warning(elem, song_hash, data) { const contains_version = data.versions.some(x => x.hash === song_hash); if (!contains_version) { const new_song_hash = data.versions[data.versions.length - 1].hash; - const { diff_name } = shared.get(); + const { diff_name } = await shared.get(); intor(elem, create("div", { style: { marginTop: "1em", cursor: "pointer" }, class: "notification is-warning", onclick: async () => { - const bs2ss = await get_scoresaber_data_by_hash(new_song_hash, diff_name); + const bs2ss = await undefined(new_song_hash, diff_name); if (bs2ss === undefined) return; new_page(`https://scoresaber.com/leaderboard/${bs2ss.uid}`); @@ -1730,144 +1813,44 @@ element.parentElement.parentElement.style.backgroundColor = "var(--color-highlight)"; } } - function add_percentage$1() { - if (!is_song_leaderboard_page()) { - return; - } - const { song_hash, diff_name } = shared.get(); - if (!song_hash) { - return; - } - (async () => { - const data = await get_data_by_hash(song_hash); - if (!data) - return; - if (!diff_name) + async function prepare_table(table) { + const header = table.querySelector(".header"); + for (const heading of header.children) { + if (heading.innerText === "Percentage") { return; - const version = data.versions.find((v) => v.hash === song_hash.toLowerCase()); - if (!diff_name || !version) - return; - const notes = get_notes_count(diff_name, "Standard", version); - if (notes < 0) - return; - const max_score = calculate_max_score(notes); - const user_scores = document.querySelectorAll("table.ranking.global tbody > tr"); - for (const score_row of user_scores) { - const percentage_column = check(score_row.querySelector("td.percentage")); - const percentage_value = percentage_column.innerText; - if (percentage_value === "-") { - const score = check(score_row.querySelector("td.score")).innerText; - const score_num = number_invariant(score); - const calculated_percentage = (100 * score_num / max_score).toFixed(2); - percentage_column.innerText = calculated_percentage + "%"; - } - } - })(); - } - - class Limiter { - constructor() { - this.ratelimit_reset = undefined; - this.ratelimit_remaining = undefined; - } - async wait() { - const now = unix_timestamp(); - if (this.ratelimit_reset === undefined || now > this.ratelimit_reset) { - this.ratelimit_reset = undefined; - this.ratelimit_remaining = undefined; - return; - } - if (this.ratelimit_remaining === 0) { - const sleepTime = (this.ratelimit_reset - now); - console.log(`Waiting for cloudflare rate limiter... ${sleepTime}sec`); - await sleep(sleepTime * 1000); - this.ratelimit_remaining = this.ratelimit_limit; - this.ratelimit_reset = undefined; } } - setLimitData(remaining, reset, limit) { - this.ratelimit_remaining = remaining; - this.ratelimit_reset = reset; - this.ratelimit_limit = limit; - } - } - async function sleep(timeout) { - return new Promise(resolve => setTimeout(resolve, timeout)); - } - function unix_timestamp() { - return Math.round((new Date()).getTime() / 1000); - } - - const SCORESABER_LINK = "https://new.scoresaber.com/api"; - const API_LIMITER = new Limiter(); - async function get_user_recent_songs_dynamic(user_id, page) { - logc(`Fetching user ${user_id} page ${page}`); - return get_user_recent_songs_new_api_wrap(user_id, page); - } - async function get_user_recent_songs_new_api_wrap(user_id, page) { - const recent_songs = await get_user_recent_songs(user_id, page); - if (!recent_songs) { - return { - meta: { was_last_page: true }, - songs: [] - }; - } - return { - meta: { - was_last_page: recent_songs.scores.length < 8 - }, - songs: recent_songs.scores.map(s => [String(s.leaderboardId), { - time: s.timeSet, - pp: s.pp, - accuracy: s.maxScore !== 0 ? round2((s.unmodififiedScore / s.maxScore) * 100) : undefined, - score: s.score, - mods: parse_mods(s.mods) - }]) - }; + const columns = header.children.length; + table.style.setProperty("--columns", `1fr 5fr repeat(${columns - 1}, 2fr)`); + into(header, create("div", { "class": `centered ${table.classList[1]}` }, "Percentage")); } - async function get_user_recent_songs(user_id, page) { - const req = await auto_fetch_retry(`${SCORESABER_LINK}/player/${user_id}/scores/recent/${page}`); - if (req.status === 404) { - return null; + async function add_percentage$1(row) { + if (!is_song_leaderboard_page()) { + return; } - const data = await req.json(); - return sanitize_song_ids(data); - } - async function get_user_info_basic(user_id) { - const req = await auto_fetch_retry(`${SCORESABER_LINK}/player/${user_id}/basic`); - const data = await req.json(); - return sanitize_player_ids(data); - } - async function auto_fetch_retry(url) { - const MAX_RETRIES = 20; - const SLEEP_WAIT = 5000; - for (let retries = MAX_RETRIES; retries >= 0; retries--) { - await API_LIMITER.wait(); - const response = await fetch(url); - const remaining = Number(response.headers.get("x-ratelimit-remaining")); - const reset = Number(response.headers.get("x-ratelimit-reset")); - const limit = Number(response.headers.get("x-ratelimit-limit")); - API_LIMITER.setLimitData(remaining, reset, limit); - if (response.status === 429) { - await sleep(SLEEP_WAIT); - } - else { - return response; - } + if (row.children.length === 6) { + return; } - throw new Error("Can't fetch data from new.scoresaber."); - } - function sanitize_player_ids(data) { - data.playerInfo.playerId = String(data.playerInfo.playerId); - return data; - } - function sanitize_song_ids(data) { - for (const s of data.scores) { - s.scoreId = String(s.scoreId); - s.leaderboardId = String(s.leaderboardId); - s.playerId = String(s.playerId); + const { song_hash, diff_name } = await shared.get(); + if (!song_hash) { + return; } - return data; + const data = await get_data_by_hash(song_hash); + if (!data) + return; + if (!diff_name) + return; + const version = data.versions.find((v) => v.hash === song_hash.toLowerCase()); + if (!diff_name || !version) + return; + const notes = get_notes_count(diff_name, "Standard", version); + if (notes < 0) + return; + const max_score = calculate_max_score(notes); + const score = check(row.querySelector(".score")).innerText; + const score_num = number_invariant(score); + const calculated_percentage = (100 * score_num / max_score).toFixed(2); + into(row, create("div", { "class": `accuracy centered ${row.classList[1]}` }, `${calculated_percentage}%`)); } async function fetch_user(user_id, force = false) { @@ -3065,14 +3048,17 @@ h5 > * { setup_self_pin_button(); setup_cache_button(); } + if (a.matches(".gridTable")) { + prepare_table(a); + } if (a.matches(".table-item")) { add_percentage(a); + add_percentage$1(a); } if (a.matches(".map-card")) { setup_dl_link_leaderboard(); setup_song_filter_tabs(); highlight_user(); - add_percentage$1(); } } } diff --git a/src/api/scoresaber.ts b/src/api/scoresaber.ts index 9da6d0f..aae7cd1 100644 --- a/src/api/scoresaber.ts +++ b/src/api/scoresaber.ts @@ -15,6 +15,11 @@ export async function get_user_recent_songs_dynamic(user_id: string, page: numbe return get_user_recent_songs_new_api_wrap(user_id, page); } +export async function get_leaderboard_info(leaderboard_id: string) { + const req = await auto_fetch_retry(`https://scoresaber.com/api/leaderboard/by-id/${leaderboard_id}/info`); + return await req.json(); +} + // NEW API ==================================================================== async function get_user_recent_songs_new_api_wrap(user_id: string, page: number): Promise { diff --git a/src/main.ts b/src/main.ts index 13cf61b..f66f8b3 100644 --- a/src/main.ts +++ b/src/main.ts @@ -46,8 +46,13 @@ const observer = new MutationObserver((mutations) => { page_user.setup_cache_button(); } + if (a.matches(".gridTable")) { + page_song.prepare_table(a); + } + if (a.matches(".table-item")) { page_user.add_percentage(a); + page_song.add_percentage(a); } // Map Page @@ -55,7 +60,6 @@ const observer = new MutationObserver((mutations) => { page_song.setup_dl_link_leaderboard(); page_song.setup_song_filter_tabs(); page_song.highlight_user(); - page_song.add_percentage(); } } } diff --git a/src/pages/song.ts b/src/pages/song.ts index a8faf7d..29d73d5 100644 --- a/src/pages/song.ts +++ b/src/pages/song.ts @@ -1,29 +1,57 @@ import * as beastsaber from "../api/beastsaber"; import * as beatsaver from "../api/beatsaver"; +import * as scoresaber from "../api/scoresaber"; import { IDbUser, ISong } from "../declarations/Types"; import { BMButton, get_home_user, is_song_leaderboard_page, Pages } from "../env"; import g from "../global"; -import { create, intor } from "../util/dom"; +import { create, into, intor } from "../util/dom"; import { check } from "../util/err"; import { format_en, number_invariant, number_to_timespan, toggled_class } from "../util/format"; import { Lazy } from "../util/lazy"; import { calculate_max_score, get_notes_count, get_song_compare_value, get_song_hash_from_text } from "../util/song"; import QuickButton from "../components/QuickButton.svelte"; import { new_page } from "../util/net"; -import { get_scoresaber_data_by_hash } from "../api/beatsaver"; const PAGE: Pages = "song"; -const shared = new Lazy(() => { - // find the element we want to modify - let details_box = check(document.querySelector(".title.is-5")); - details_box = check(details_box.parentElement.parentElement.parentElement); - - const song_hash = get_song_hash_from_text(details_box.innerHTML); - - const diff_name = document.querySelector(`div.tabs a.selected`)?.innerText; - return { song_hash, details_box, diff_name }; -}); +class shared { + public static _current_page; + public static song_hash; + public static details_box; + public static diff_name; + public static game_mode; + + private static _leaderboard_info ={}; + + static async get() { + if (this._current_page === window.location.pathname) { + // I hate javascript so much + const song_hash = this.song_hash, details_box = this.details_box, diff_name = this.diff_name, game_mode = this.game_mode; + return { song_hash, details_box, diff_name, game_mode }; + } + + // find the element we want to modify + this.details_box = check(document.querySelector(".title.is-5").parentElement.parentElement.parentElement); + + const id = window.location.pathname.split('/').pop(); + + if (this._leaderboard_info[id] === undefined) { + console.log(`Refresh, ${this._current_href} !== ${window.location.href} ${this.song_hash}`); + this._leaderboard_info[id] = scoresaber.get_leaderboard_info(id); + } + + const leaderboard_info = await this._leaderboard_info[id]; + + this.song_hash = leaderboard_info.songHash.toLowerCase(); + this.diff_name = leaderboard_info.difficulty.difficultyRaw.split("_")[1]; + this.game_mode = leaderboard_info.difficulty.gameMode; + + this._current_page = window.location.pathname; + + const song_hash = this.song_hash, details_box = this.details_box, diff_name = this.diff_name, game_mode = this.game_mode; + return { song_hash, details_box, diff_name, game_mode }; + } +} export function setup_song_filter_tabs(): void { if (!is_song_leaderboard_page()) { return; } @@ -48,7 +76,6 @@ export function setup_song_filter_tabs(): void { } elements.sort((a, b) => { const [sa, sb] = get_song_compare_value(a[0], b[0]); return sb - sa; }); elements.forEach(x => score_table.appendChild(x[1])); - add_percentage(); } function load_all() { @@ -61,7 +88,6 @@ export function setup_song_filter_tabs(): void { table.removeChild(score_table); score_table = table.appendChild(g.song_table_backup); g.song_table_backup = undefined; - add_percentage(); } tab_list_content.appendChild(generate_tab("All Scores", "all_scores_tab", load_all, true, true)); @@ -69,12 +95,10 @@ export function setup_song_filter_tabs(): void { // tab_list_content.appendChild(generate_tab("Around Me", "around_me_tab", () => {}, false, false)); } -export function setup_dl_link_leaderboard(): void { +export async function setup_dl_link_leaderboard(): void { if (!is_song_leaderboard_page()) { return; } - - shared.reset(); - const { song_hash, details_box } = shared.get(); + const { song_hash, details_box } = await shared.get(); const tool_strip = create("div", { id: "leaderboard_tool_strip", @@ -131,18 +155,18 @@ export function setup_dl_link_leaderboard(): void { })(); } -function show_song_warning(elem: HTMLElement, song_hash: string, data: beatsaver.IBeatSaverData) { +async function show_song_warning(elem: HTMLElement, song_hash: string, data: beatsaver.IBeatSaverData) { const contains_version = data.versions.some(x => x.hash === song_hash); if (!contains_version) { const new_song_hash = data.versions[data.versions.length - 1].hash; - const { diff_name } = shared.get(); + const { diff_name } = await shared.get(); intor(elem, create("div", { style: { marginTop: "1em", cursor: "pointer" }, class: "notification is-warning", onclick: async () => { - const bs2ss = await get_scoresaber_data_by_hash(new_song_hash, diff_name); + const bs2ss = await scoresaber.get_scoresaber_data_by_hash(new_song_hash, diff_name); if (bs2ss === undefined) return; new_page(`https://scoresaber.com/leaderboard/${bs2ss.uid}`); @@ -233,43 +257,61 @@ export function highlight_user(): void { } } -export function add_percentage(): void { +// Add column for percentage if it doesn't exist +export async function prepare_table(table: HTMLElement): void { + const header = table.querySelector(".header"); + + for (const heading of header.children) { + if (heading.innerText === "Percentage") { + return; + } + } + const columns = header.children.length; + + table.style.setProperty("--columns", `1fr 5fr repeat(${columns - 1}, 2fr)`); + into(header, create( + "div", + {"class": `centered ${table.classList[1]}`}, + "Percentage" + )); +} + +export async function add_percentage(row: HTMLElement): void { if (!is_song_leaderboard_page()) { return; } - const { song_hash, diff_name } = shared.get(); + if (row.children.length === 6) { + return; + } + + const { song_hash, diff_name } = await shared.get(); if (!song_hash) { return; } - (async () => { - const data = await beatsaver.get_data_by_hash(song_hash); - if (!data) - return; - // Scoresaber fails to display the difficlulty tab for some categories (e.g. Lawless), ex: - // - none at all: https://scoresaber.com/leaderboard/307121 - // - only expert+ shown, but actual diff is missing: https://scoresaber.com/leaderboard/314128 - if (!diff_name) - return; - const version = data.versions.find((v) => v.hash === song_hash.toLowerCase()); - if (!diff_name || !version) - return; - const notes = get_notes_count(diff_name, "Standard", version); - if (notes < 0) - return; - const max_score = calculate_max_score(notes); - const user_scores = document.querySelectorAll("table.ranking.global tbody > tr"); - for (const score_row of user_scores) { - const percentage_column = check(score_row.querySelector("td.percentage")); - const percentage_value = percentage_column.innerText; - if (percentage_value === "-") { - const score = check(score_row.querySelector("td.score")).innerText; - const score_num = number_invariant(score); - const calculated_percentage = (100 * score_num / max_score).toFixed(2); - percentage_column.innerText = calculated_percentage + "%"; - } - } - })(); + const data = await beatsaver.get_data_by_hash(song_hash); + if (!data) + return; + // Scoresaber fails to display the difficlulty tab for some categories (e.g. Lawless), ex: + // - none at all: https://scoresaber.com/leaderboard/307121 + // - only expert+ shown, but actual diff is missing: https://scoresaber.com/leaderboard/314128 + if (!diff_name) + return; + const version = data.versions.find((v) => v.hash === song_hash.toLowerCase()); + if (!diff_name || !version) + return; + const notes = get_notes_count(diff_name, "Standard", version); + if (notes < 0) + return; + const max_score = calculate_max_score(notes); + const score = check(row.querySelector(".score")).innerText; + const score_num = number_invariant(score); + const calculated_percentage = (100 * score_num / max_score).toFixed(2); + into(row, create( + "div", + {"class" : `accuracy centered ${row.classList[1]}`}, + `${calculated_percentage}%` + )); } From 3734121ac6c87c48c702f3605bae421d9e11bba0 Mon Sep 17 00:00:00 2001 From: Chris Allan Date: Sun, 12 Dec 2021 22:29:41 -0800 Subject: [PATCH 09/16] Use game mode --- scoresaber.user.js | 6 +++--- src/pages/song.ts | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/scoresaber.user.js b/scoresaber.user.js index fbdcaff..206add9 100644 --- a/scoresaber.user.js +++ b/scoresaber.user.js @@ -1673,7 +1673,7 @@ const leaderboard_info = await this._leaderboard_info[id]; this.song_hash = leaderboard_info.songHash.toLowerCase(); this.diff_name = leaderboard_info.difficulty.difficultyRaw.split("_")[1]; - this.game_mode = leaderboard_info.difficulty.gameMode; + this.game_mode = leaderboard_info.difficulty.gameMode.replace("Solo", ""); this._current_page = window.location.pathname; const song_hash = this.song_hash, details_box = this.details_box, diff_name = this.diff_name, game_mode = this.game_mode; return { song_hash, details_box, diff_name, game_mode }; @@ -1831,7 +1831,7 @@ if (row.children.length === 6) { return; } - const { song_hash, diff_name } = await shared.get(); + const { song_hash, diff_name, game_mode } = await shared.get(); if (!song_hash) { return; } @@ -1843,7 +1843,7 @@ const version = data.versions.find((v) => v.hash === song_hash.toLowerCase()); if (!diff_name || !version) return; - const notes = get_notes_count(diff_name, "Standard", version); + const notes = get_notes_count(diff_name, game_mode, version); if (notes < 0) return; const max_score = calculate_max_score(notes); diff --git a/src/pages/song.ts b/src/pages/song.ts index 29d73d5..bbd80db 100644 --- a/src/pages/song.ts +++ b/src/pages/song.ts @@ -44,7 +44,7 @@ class shared { this.song_hash = leaderboard_info.songHash.toLowerCase(); this.diff_name = leaderboard_info.difficulty.difficultyRaw.split("_")[1]; - this.game_mode = leaderboard_info.difficulty.gameMode; + this.game_mode = leaderboard_info.difficulty.gameMode.replace("Solo",""); this._current_page = window.location.pathname; @@ -285,7 +285,7 @@ export async function add_percentage(row: HTMLElement): void { return; } - const { song_hash, diff_name } = await shared.get(); + const { song_hash, diff_name, game_mode } = await shared.get(); if (!song_hash) { return; @@ -302,7 +302,7 @@ export async function add_percentage(row: HTMLElement): void { const version = data.versions.find((v) => v.hash === song_hash.toLowerCase()); if (!diff_name || !version) return; - const notes = get_notes_count(diff_name, "Standard", version); + const notes = get_notes_count(diff_name, game_mode, version); if (notes < 0) return; const max_score = calculate_max_score(notes); From 054ef17b6a59d85d2eac86b54677853999237562 Mon Sep 17 00:00:00 2001 From: Chris Allan Date: Wed, 15 Dec 2021 20:56:50 -0800 Subject: [PATCH 10/16] Oops --- scoresaber.user.js | 6 +++--- src/pages/song.ts | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/scoresaber.user.js b/scoresaber.user.js index 206add9..b75f25a 100644 --- a/scoresaber.user.js +++ b/scoresaber.user.js @@ -1816,19 +1816,19 @@ async function prepare_table(table) { const header = table.querySelector(".header"); for (const heading of header.children) { - if (heading.innerText === "Percentage") { + if (heading.innerText === "Accuracy") { return; } } const columns = header.children.length; table.style.setProperty("--columns", `1fr 5fr repeat(${columns - 1}, 2fr)`); - into(header, create("div", { "class": `centered ${table.classList[1]}` }, "Percentage")); + into(header, create("div", { "class": `centered ${table.classList[1]}` }, "Accuracy")); } async function add_percentage$1(row) { if (!is_song_leaderboard_page()) { return; } - if (row.children.length === 6) { + if (row.querySelector('.accuracy')) { return; } const { song_hash, diff_name, game_mode } = await shared.get(); diff --git a/src/pages/song.ts b/src/pages/song.ts index bbd80db..442158f 100644 --- a/src/pages/song.ts +++ b/src/pages/song.ts @@ -262,7 +262,7 @@ export async function prepare_table(table: HTMLElement): void { const header = table.querySelector(".header"); for (const heading of header.children) { - if (heading.innerText === "Percentage") { + if (heading.innerText === "Accuracy") { return; } } @@ -272,7 +272,7 @@ export async function prepare_table(table: HTMLElement): void { into(header, create( "div", {"class": `centered ${table.classList[1]}`}, - "Percentage" + "Accuracy" )); } @@ -281,7 +281,7 @@ export async function add_percentage(row: HTMLElement): void { return; } - if (row.children.length === 6) { + if (row.querySelector('.accuracy')) { return; } From 3aa366cf52848d0b74e3f52f65f23afd378cdde7 Mon Sep 17 00:00:00 2001 From: Chris Allan Date: Sat, 18 Dec 2021 19:34:04 -0800 Subject: [PATCH 11/16] User page buttons --- scoresaber.user.js | 33 +++++++++++++++++++++++++++-- src/main.ts | 3 ++- src/pages/song.ts | 2 ++ src/pages/user.ts | 52 +++++++++++++--------------------------------- 4 files changed, 49 insertions(+), 41 deletions(-) diff --git a/scoresaber.user.js b/scoresaber.user.js index b75f25a..5412ff3 100644 --- a/scoresaber.user.js +++ b/scoresaber.user.js @@ -168,6 +168,11 @@ } return elem; } + function as_fragment(builder) { + const frag = document.createDocumentFragment(); + builder(frag); + return frag; + } class Modal { constructor(elem) { @@ -311,6 +316,11 @@ Preview: { short: "👓", long: "Preview", tip: "Preview map" }, BSR: { short: "❗", long: "BeatSaver Request", tip: "Copy !bsr" }, }; + function bmvar(page, button, def) { + return { + display: `var(--sse-show-${page}-${button}, ${def})`, + }; + } function get_button_matrix() { const json = localStorage.getItem("sse_button_matrix"); if (!json) @@ -1657,7 +1667,7 @@ } } - const PAGE = "song"; + const PAGE$1 = "song"; class shared { static async get() { if (this._current_page === window.location.pathname) { @@ -1729,7 +1739,7 @@ for (const btn of BMButton) { new QuickButton({ target: tool_strip, - props: { song_hash, size: "large", type: btn, page: PAGE } + props: { song_hash, size: "large", type: btn, page: PAGE$1 } }); } details_box.appendChild(tool_strip); @@ -1814,6 +1824,9 @@ } } async function prepare_table(table) { + if (!is_song_leaderboard_page()) { + return; + } const header = table.querySelector(".header"); for (const heading of header.children) { if (heading.innerText === "Accuracy") { @@ -1914,6 +1927,7 @@ return { has_old_entry, has_updated }; } + const PAGE = "user"; function setup_cache_button() { if (!is_user_page()) { return; @@ -1934,6 +1948,20 @@ into(header, status_elem); SseEvent.StatusInfo.register((status) => intor(status_elem, status.text)); } + function setup_dl_link_user_site(row) { + if (!is_user_page()) { + return; + } + const image_link = check(row.querySelector(".song-container img")).src; + const song_hash = get_song_hash_from_text(image_link); + const col = row.querySelector('.scoreInfo > div:last-child'); + for (const btn of BMButton) { + into(col, create("span", { class: `stat clickable ${col.classList[0]}`, style: bmvar(PAGE, btn, "table-cell") }, as_fragment(target => new QuickButton({ + target, + props: { song_hash, size: "medium", type: btn } + })))); + } + } function update_wide_table_css() { if (!is_user_page()) { return; @@ -3053,6 +3081,7 @@ h5 > * { } if (a.matches(".table-item")) { add_percentage(a); + setup_dl_link_user_site(a); add_percentage$1(a); } if (a.matches(".map-card")) { diff --git a/src/main.ts b/src/main.ts index f66f8b3..c51fb20 100644 --- a/src/main.ts +++ b/src/main.ts @@ -52,6 +52,7 @@ const observer = new MutationObserver((mutations) => { if (a.matches(".table-item")) { page_user.add_percentage(a); + page_user.setup_dl_link_user_site(a); page_song.add_percentage(a); } @@ -65,7 +66,7 @@ const observer = new MutationObserver((mutations) => { } /* - page_user.setup_dl_link_user_site(); + page_user.update_wide_table_css(); page_songlist.setup_links_songlist(); page_songlist.setup_extra_filter_checkboxes(); diff --git a/src/pages/song.ts b/src/pages/song.ts index 442158f..310ac67 100644 --- a/src/pages/song.ts +++ b/src/pages/song.ts @@ -259,6 +259,8 @@ export function highlight_user(): void { // Add column for percentage if it doesn't exist export async function prepare_table(table: HTMLElement): void { + if (!is_song_leaderboard_page()) { return; } + const header = table.querySelector(".header"); for (const heading of header.children) { diff --git a/src/pages/user.ts b/src/pages/user.ts index 61d2a87..605b010 100644 --- a/src/pages/user.ts +++ b/src/pages/user.ts @@ -39,49 +39,25 @@ export function setup_cache_button(): void { SseEvent.StatusInfo.register((status) => intor(status_elem, status.text)); } -export function setup_dl_link_user_site(): void { +export function setup_dl_link_user_site(row: HTMLElement): void { if (!is_user_page()) { return; } - // find the table we want to modify - const table = check(document.querySelector(".ranking.songs")); - - // add a new column for our links - /* - const table_tr = check(table.querySelector(".table-item")); + // add a link for each song + const image_link = check(row.querySelector(".song-container img")).src; + const song_hash = get_song_hash_from_text(image_link); + + const col = row.querySelector('.scoreInfo > div:last-child'); + for (const btn of BMButton) { - into(table_tr, - create("div", { - class: "compact svelte-hij8c", // TODO: might not be static - style: bmvar(PAGE, btn, "table-cell"), - // TODO: Tooltip is currently cut off at the to due to div nesting - //data: { tooltip: BMButtonHelp[btn].long }, - }, BMButtonHelp[btn].short) + into(col, + create("span", { class: `stat clickable ${col.classList[0]}`, style: bmvar(PAGE, btn, "table-cell") }, + as_fragment(target => new QuickButton({ + target, + props: { song_hash, size: "medium", type: btn } + })) + ) ); } - * */ - - // add a link for each song - const table_row = table.querySelectorAll(".table-item"); - for (const row of table_row) { - const image_link = check(row.querySelector(".song-container img")).src; - const song_hash = get_song_hash_from_text(image_link); - - const col = create("div", { - class: "svelte-hij8c" - }); - into(row, col); - - for (const btn of BMButton) { - into(col, - create("span", { class: "compact", style: bmvar(PAGE, btn, "table-cell") }, - as_fragment(target => new QuickButton({ - target, - props: { song_hash, size: "medium", type: btn } - })) - ) - ); - } - } } // ** Wide table *** From fa909b748c8b76b22a16128cd83a79f71e34dfaa Mon Sep 17 00:00:00 2001 From: Chris Allan Date: Sat, 26 Mar 2022 14:37:54 -0700 Subject: [PATCH 12/16] Stop yeeting the header >:[ --- src/main.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main.ts b/src/main.ts index c51fb20..91596a7 100644 --- a/src/main.ts +++ b/src/main.ts @@ -63,6 +63,18 @@ const observer = new MutationObserver((mutations) => { page_song.highlight_user(); } } + // Svelite >:[ + for (const r of m.removedNodes) { + if (!(r instanceof HTMLElement)) { + continue; + } + if (r.matches("a#home_user")) { + header.setup_self_button(); + } + if (r.matches("a#settings_menu")) { + settings.setup(); + } + } } /* From 44ab104df64cd9919d68126d9380b65c3e99de52 Mon Sep 17 00:00:00 2001 From: Chris Allan Date: Sun, 27 Mar 2022 08:45:28 -0700 Subject: [PATCH 13/16] Better look for user page table buttons --- scoresaber.user.js | 17 +++++++++++++++-- src/pages/user.ts | 8 +++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/scoresaber.user.js b/scoresaber.user.js index 5412ff3..2ab30fd 100644 --- a/scoresaber.user.js +++ b/scoresaber.user.js @@ -1954,9 +1954,11 @@ } const image_link = check(row.querySelector(".song-container img")).src; const song_hash = get_song_hash_from_text(image_link); - const col = row.querySelector('.scoreInfo > div:last-child'); + const col = row.querySelector('.scoreInfo'); + const div = create("div", { class: col.classList[1] }); + into(col, div); for (const btn of BMButton) { - into(col, create("span", { class: `stat clickable ${col.classList[0]}`, style: bmvar(PAGE, btn, "table-cell") }, as_fragment(target => new QuickButton({ + into(div, create("span", { class: `stat clickable ${col.classList[1]}`, style: bmvar(PAGE, btn, "table-cell") }, as_fragment(target => new QuickButton({ target, props: { song_hash, size: "medium", type: btn } })))); @@ -3090,6 +3092,17 @@ h5 > * { highlight_user(); } } + for (const r of m.removedNodes) { + if (!(r instanceof HTMLElement)) { + continue; + } + if (r.matches("a#home_user")) { + setup_self_button(); + } + if (r.matches("a#settings_menu")) { + setup(); + } + } } }); observer.observe(document, { childList: true, subtree: true }); diff --git a/src/pages/user.ts b/src/pages/user.ts index 605b010..1df2404 100644 --- a/src/pages/user.ts +++ b/src/pages/user.ts @@ -46,11 +46,13 @@ export function setup_dl_link_user_site(row: HTMLElement): void { const image_link = check(row.querySelector(".song-container img")).src; const song_hash = get_song_hash_from_text(image_link); - const col = row.querySelector('.scoreInfo > div:last-child'); + const col = row.querySelector('.scoreInfo'); + const div = create("div", { class: col.classList[1] }); + into(col, div); for (const btn of BMButton) { - into(col, - create("span", { class: `stat clickable ${col.classList[0]}`, style: bmvar(PAGE, btn, "table-cell") }, + into(div, + create("span", { class: `stat clickable ${col.classList[1]}`, style: bmvar(PAGE, btn, "table-cell") }, as_fragment(target => new QuickButton({ target, props: { song_hash, size: "medium", type: btn } From 2dda0e1e620d5d943c7c717aff545e4a7949b914 Mon Sep 17 00:00:00 2001 From: Chris Allan Date: Thu, 21 Apr 2022 18:12:07 -0700 Subject: [PATCH 14/16] Fix percentages --- scoresaber.user.js | 4 ++-- src/pages/user.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scoresaber.user.js b/scoresaber.user.js index 2ab30fd..26cc946 100644 --- a/scoresaber.user.js +++ b/scoresaber.user.js @@ -1996,11 +1996,11 @@ if (notes < 0) return; const max_score = calculate_max_score(notes); - const user_score = check(row.querySelector(".scoreInfo > div:last-of-type > .stat")).innerText; + const user_score = check(row.querySelector(".scoreInfo > div:first-of-type > .stat:first-of-type")).innerText; const { score } = parse_score_bottom(user_score); if (score !== undefined) { const calculated_percentage = (100 * score / max_score).toFixed(2); - const score_row = row.querySelector(".scoreInfo > div:last-of-type"); + const score_row = row.querySelector(".scoreInfo > div:first-of-type"); score_row.insertBefore(create("span", { "class": `stat acc ${score_row.classList[0]}` }, `${calculated_percentage}%`), score_row.children[0]); } })(); diff --git a/src/pages/user.ts b/src/pages/user.ts index 1df2404..5ffb8f9 100644 --- a/src/pages/user.ts +++ b/src/pages/user.ts @@ -99,11 +99,11 @@ export function add_percentage(row: HTMLElement): void { if (notes < 0) return; const max_score = calculate_max_score(notes); - const user_score = check(row.querySelector(".scoreInfo > div:last-of-type > .stat")).innerText; + const user_score = check(row.querySelector(".scoreInfo > div:first-of-type > .stat:first-of-type")).innerText; const { score } = parse_score_bottom(user_score); if (score !== undefined) { const calculated_percentage = (100 * score / max_score).toFixed(2); - const score_row = row.querySelector(".scoreInfo > div:last-of-type"); + const score_row = row.querySelector(".scoreInfo > div:first-of-type"); score_row.insertBefore( create("span", {"class": `stat acc ${score_row.classList[0]}`}, `${calculated_percentage}%`), score_row.children[0] From 92136da68dcd84286aa12e7a18622c45782ecab9 Mon Sep 17 00:00:00 2001 From: Splamy Date: Fri, 10 Feb 2023 23:54:24 +0100 Subject: [PATCH 15/16] Readme note --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index ad65543..76bb9b5 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,9 @@ The generated output file is always `scoresaber.user.js`. # Changelog +2.0.0-alpha.0 | 2023-02-10 + - Merged Rework for new ScoreSaber Website from [@ChrisJAllan](https://github.com/ChrisJAllan) + 1.12.0 | 2021-11-06 - Added smol notice when a map has a newer version on BeatSaver From f4eb9efbccb4026c69dc5220f75603cb93cdfe7d Mon Sep 17 00:00:00 2001 From: Splamy Date: Sat, 11 Feb 2023 00:02:48 +0100 Subject: [PATCH 16/16] version bumps --- package.json | 30 +- scoresaber.user.js | 376 ++- yarn.lock | 6692 +++++++++++++++++++++----------------------- 3 files changed, 3445 insertions(+), 3653 deletions(-) diff --git a/package.json b/package.json index 16077e9..4bd2ebc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "scoresaberenhanced", - "version": "1.12.0", + "version": "2.0.0-alpha.0", "description": "Adds links to beatsaver, player comparison and various other improvements", "main": "src/main.ts", "scripts": { @@ -27,21 +27,21 @@ }, "homepage": "https://github.com/Splamy/ScoreSaberEnhanced#readme", "devDependencies": { - "@rbnlffl/rollup-plugin-eslint": "2.0.0", - "@rollup/plugin-commonjs": "^21.0.1", - "@rollup/plugin-node-resolve": "^13.0.4", - "@rollup/plugin-typescript": "8.3.0", - "@typescript-eslint/eslint-plugin": "5.3.0", - "@typescript-eslint/parser": "5.3.0", - "eslint": "8.2.0", + "@rbnlffl/rollup-plugin-eslint": "4.0.0", + "@rollup/plugin-commonjs": "24.0.1", + "@rollup/plugin-node-resolve": "15.0.1", + "@rollup/plugin-typescript": "11.0.0", + "@typescript-eslint/eslint-plugin": "5.51.0", + "@typescript-eslint/parser": "5.51.0", + "eslint": "8.34.0", "gulp": "4.0.2", "gulp-concat": "2.6.1", - "gulp-replace": "1.1.3", - "rollup": "2.59.0", - "rollup-plugin-svelte": "^7.1.0", - "svelte": "^3.41.0", - "svelte-preprocess": "^4.7.4", - "tslib": "2.3.1", - "typescript": "4.4.4" + "gulp-replace": "1.1.4", + "rollup": "3.15.0", + "rollup-plugin-svelte": "7.1.2", + "svelte": "3.55.1", + "svelte-preprocess": "5.0.1", + "tslib": "2.5.0", + "typescript": "4.9.5" } } diff --git a/scoresaber.user.js b/scoresaber.user.js index 26cc946..b09096b 100644 --- a/scoresaber.user.js +++ b/scoresaber.user.js @@ -1,6 +1,6 @@ // ==UserScript== // @name ScoreSaberEnhanced -// @version 1.12.0 +// @version 2.0.0-alpha.0 // @description Adds links to beatsaver, player comparison and various other improvements // @author Splamy, TheAsuro // @namespace https://scoresaber.com @@ -944,19 +944,22 @@ if (!node) return document; const root = node.getRootNode ? node.getRootNode() : node.ownerDocument; - if (root.host) { + if (root && root.host) { return root; } - return document; + return node.ownerDocument; } function append_stylesheet(node, style) { append(node.head || node, style); + return style.sheet; } function insert(target, node, anchor) { target.insertBefore(node, anchor || null); } function detach(node) { - node.parentNode.removeChild(node); + if (node.parentNode) { + node.parentNode.removeChild(node); + } } function destroy_each(iterations, detaching) { for (let i = 0; i < iterations.length; i += 1) { @@ -994,6 +997,7 @@ return; } } + select.selectedIndex = -1; // no option should be selected } function select_value(select) { const selected_option = select.querySelector(':checked') || select.options[0]; @@ -1023,22 +1027,54 @@ function add_render_callback(fn) { render_callbacks.push(fn); } - let flushing = false; + // flush() calls callbacks in this order: + // 1. All beforeUpdate callbacks, in order: parents before children + // 2. All bind:this callbacks, in reverse order: children before parents. + // 3. All afterUpdate callbacks, in order: parents before children. EXCEPT + // for afterUpdates called during the initial onMount, which are called in + // reverse order: children before parents. + // Since callbacks might update component values, which could trigger another + // call to flush(), the following steps guard against this: + // 1. During beforeUpdate, any updated components will be added to the + // dirty_components array and will cause a reentrant call to flush(). Because + // the flush index is kept outside the function, the reentrant call will pick + // up where the earlier call left off and go through all dirty components. The + // current_component value is saved and restored so that the reentrant call will + // not interfere with the "parent" flush() call. + // 2. bind:this callbacks cannot trigger new flush() calls. + // 3. During afterUpdate, any updated components will NOT have their afterUpdate + // callback called a second time; the seen_callbacks set, outside the flush() + // function, guarantees this behavior. const seen_callbacks = new Set(); + let flushidx = 0; // Do *not* move this inside the flush() function function flush() { - if (flushing) + // Do not reenter flush while dirty components are updated, as this can + // result in an infinite loop. Instead, let the inner flush handle it. + // Reentrancy is ok afterwards for bindings etc. + if (flushidx !== 0) { return; - flushing = true; + } + const saved_component = current_component; do { // first, call beforeUpdate functions // and update components - for (let i = 0; i < dirty_components.length; i += 1) { - const component = dirty_components[i]; - set_current_component(component); - update(component.$$); + try { + while (flushidx < dirty_components.length) { + const component = dirty_components[flushidx]; + flushidx++; + set_current_component(component); + update(component.$$); + } + } + catch (e) { + // reset dirty state to not end up in a deadlocked state and then rethrow + dirty_components.length = 0; + flushidx = 0; + throw e; } set_current_component(null); dirty_components.length = 0; + flushidx = 0; while (binding_callbacks.length) binding_callbacks.pop()(); // then, once components are updated, call @@ -1058,8 +1094,8 @@ flush_callbacks.pop()(); } update_scheduled = false; - flushing = false; seen_callbacks.clear(); + set_current_component(saved_component); } function update($$) { if ($$.fragment !== null) { @@ -1107,19 +1143,25 @@ }); block.o(local); } + else if (callback) { + callback(); + } } function create_component(block) { block && block.c(); } function mount_component(component, target, anchor, customElement) { - const { fragment, on_mount, on_destroy, after_update } = component.$$; + const { fragment, after_update } = component.$$; fragment && fragment.m(target, anchor); if (!customElement) { // onMount happens before the initial afterUpdate add_render_callback(() => { - const new_on_destroy = on_mount.map(run).filter(is_function); - if (on_destroy) { - on_destroy.push(...new_on_destroy); + const new_on_destroy = component.$$.on_mount.map(run).filter(is_function); + // if the component was destroyed immediately + // it will update the `$$.on_destroy` reference to `null`. + // the destructured on_destroy may still reference to the old array + if (component.$$.on_destroy) { + component.$$.on_destroy.push(...new_on_destroy); } else { // Edge case - component was destroyed immediately, @@ -1155,7 +1197,7 @@ set_current_component(component); const $$ = component.$$ = { fragment: null, - ctx: null, + ctx: [], // state props, update: noop, @@ -1167,7 +1209,7 @@ on_disconnect: [], before_update: [], after_update: [], - context: new Map(parent_component ? parent_component.$$.context : options.context || []), + context: new Map(options.context || (parent_component ? parent_component.$$.context : [])), // everything else callbacks: blank_object(), dirty, @@ -1220,6 +1262,9 @@ this.$destroy = noop; } $on(type, callback) { + if (!is_function(callback)) { + return noop; + } const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = [])); callbacks.push(callback); return () => { @@ -1237,13 +1282,13 @@ } } - /* src/components/QuickButton.svelte generated by Svelte v3.41.0 */ + /* src\components\QuickButton.svelte generated by Svelte v3.55.1 */ function add_css(target) { append_styles(target, "svelte-sm24eh", "div.svelte-sm24eh{padding:0;cursor:pointer;z-index:10}div.svelte-sm24eh:disabled{cursor:default}.bsaber_bg.svelte-sm24eh{background-image:url(\"https://bsaber.com/wp-content/themes/beastsaber-wp-theme/assets/img/avater-callback.png\");background-size:cover;background-repeat:no-repeat;background-position:center;width:100%;height:100%;border-radius:inherit}.dummy.svelte-sm24eh{position:absolute;top:0px;left:-100000px}"); } - // (128:26) + // (113:26) function create_if_block_5(ctx) { let i; let t; @@ -1273,7 +1318,7 @@ }; } - // (126:30) + // (111:30) function create_if_block_4(ctx) { let i; @@ -1292,7 +1337,7 @@ }; } - // (124:32) + // (109:32) function create_if_block_3(ctx) { let i; @@ -1311,7 +1356,7 @@ }; } - // (122:28) + // (107:28) function create_if_block_2(ctx) { let div; @@ -1330,7 +1375,7 @@ }; } - // (120:25) + // (105:25) function create_if_block_1(ctx) { let i; @@ -1349,7 +1394,7 @@ }; } - // (118:1) {#if type === "BS"} + // (103:1) {#if type === "BS"} function create_if_block(ctx) { let div; @@ -1458,45 +1503,6 @@ function instance$1($$self, $$props, $$invalidate) { let disabled; let display; - - var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P - ? value - : new P(function (resolve) { - resolve(value); - }); - } - - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch(e) { - reject(e); - } - } - - function rejected(value) { - try { - step(generator["throw"](value)); - } catch(e) { - reject(e); - } - } - - function step(result) { - result.done - ? resolve(result.value) - : adopt(result.value).then(fulfilled, rejected); - } - - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - - - let { song_hash = undefined } = $$props; let { type } = $$props; let { size } = $$props; @@ -1507,24 +1513,22 @@ let color; let tooltip; - function checked_hash_to_song_info(song_hash) { - return __awaiter(this, void 0, void 0, function* () { - reset_download_visual(); + async function checked_hash_to_song_info(song_hash) { + reset_download_visual(); - if (song_hash === undefined) { - failed_to_download(); - throw new Error("song_hash is undefined"); - } + if (song_hash === undefined) { + failed_to_download(); + throw new Error("song_hash is undefined"); + } - const song_info = yield get_data_by_hash(song_hash); + const song_info = await get_data_by_hash(song_hash); - if (song_info === undefined) { - failed_to_download(); - throw new Error("song_info is undefined"); - } + if (song_info === undefined) { + failed_to_download(); + throw new Error("song_info is undefined"); + } - return song_info; - }); + return song_info; } function reset_download_visual() { @@ -1540,36 +1544,34 @@ button.classList.add("button_success"); } - function onclick() { - return __awaiter(this, void 0, void 0, function* () { - if (preview) return; - - try { - const song_info = yield checked_hash_to_song_info(song_hash); - - if (type === "BS") { - new_page(Global.beatsaver_link + song_info.id); - } else if (type === "OC") { - yield oneclick_install(song_info.id); - ok_after_download(); - } else if (type === "Beast") { - new_page(Global.bsaber_songs_link + song_info.id); - } else if (type === "BeastBook") { - new_page(Global.bsaber_songs_link + song_info.id); - } else if (type === "Preview") { - new_page("https://skystudioapps.com/bs-viewer/?id=" + song_info.id); - } else if (type === "BSR") { - $$invalidate(4, txtDummyNode.value = `!bsr ${song_info.id}`, txtDummyNode); - txtDummyNode.select(); - txtDummyNode.setSelectionRange(0, 99999); - document.execCommand("copy"); - ok_after_download(); - } - } catch(err) { - console.log("Failed QuickAction", song_hash, err); - failed_to_download(); + async function onclick() { + if (preview) return; + + try { + const song_info = await checked_hash_to_song_info(song_hash); + + if (type === "BS") { + new_page(Global.beatsaver_link + song_info.id); + } else if (type === "OC") { + await oneclick_install(song_info.id); + ok_after_download(); + } else if (type === "Beast") { + new_page(Global.bsaber_songs_link + song_info.id); + } else if (type === "BeastBook") { + new_page(Global.bsaber_songs_link + song_info.id); + } else if (type === "Preview") { + new_page("https://skystudioapps.com/bs-viewer/?id=" + song_info.id); + } else if (type === "BSR") { + $$invalidate(4, txtDummyNode.value = `!bsr ${song_info.id}`, txtDummyNode); + txtDummyNode.select(); + txtDummyNode.setSelectionRange(0, 99999); + document.execCommand("copy"); + ok_after_download(); } - }); + } catch(err) { + console.log("Failed QuickAction", song_hash, err); + failed_to_download(); + } } function input_binding($$value) { @@ -2153,41 +2155,40 @@ h5 > * { into(document.head, create("link", { rel: "stylesheet", href: "https://cdn.jsdelivr.net/npm/bulma-checkradio/dist/css/bulma-checkradio.min.css" })); } - /* src/components/SettingsDialogue.svelte generated by Svelte v3.41.0 */ + /* src\components\SettingsDialogue.svelte generated by Svelte v3.55.1 */ function get_each_context(ctx, list, i) { const child_ctx = ctx.slice(); - child_ctx[16] = list[i]; + child_ctx[15] = list[i]; return child_ctx; } function get_each_context_1(ctx, list, i) { const child_ctx = ctx.slice(); - child_ctx[19] = list[i]; + child_ctx[18] = list[i]; return child_ctx; } function get_each_context_2(ctx, list, i) { const child_ctx = ctx.slice(); - child_ctx[19] = list[i]; + child_ctx[18] = list[i]; return child_ctx; } function get_each_context_3(ctx, list, i) { const child_ctx = ctx.slice(); - child_ctx[24] = list[i]; + child_ctx[23] = list[i]; return child_ctx; } - // (122:5) {#each themes as name} + // (104:5) {#each themes as name} function create_each_block_3(ctx) { let option; - let t0_value = /*name*/ ctx[24] + ""; + let t0_value = /*name*/ ctx[23] + ""; let t0; - let t1_value = (dark_themes.includes(/*name*/ ctx[24]) ? " (Dark)" : "") + ""; + let t1_value = (dark_themes.includes(/*name*/ ctx[23]) ? " (Dark)" : "") + ""; let t1; let t2; - let option_value_value; let option_selected_value; return { @@ -2196,9 +2197,9 @@ h5 > * { t0 = text(t0_value); t1 = text(t1_value); t2 = space(); - option.__value = option_value_value = /*name*/ ctx[24]; + option.__value = /*name*/ ctx[23]; option.value = option.__value; - option.selected = option_selected_value = /*name*/ ctx[24] === /*current_theme*/ ctx[0]; + option.selected = option_selected_value = /*name*/ ctx[23] === /*current_theme*/ ctx[0]; }, m(target, anchor) { insert(target, option, anchor); @@ -2207,7 +2208,7 @@ h5 > * { append(option, t2); }, p(ctx, dirty) { - if (dirty & /*current_theme, themes*/ 1 && option_selected_value !== (option_selected_value = /*name*/ ctx[24] === /*current_theme*/ ctx[0])) { + if (dirty & /*current_theme, themes*/ 1 && option_selected_value !== (option_selected_value = /*name*/ ctx[23] === /*current_theme*/ ctx[0])) { option.selected = option_selected_value; } }, @@ -2217,7 +2218,7 @@ h5 > * { }; } - // (154:3) {#each env.BMButton as button} + // (136:3) {#each env.BMButton as button} function create_each_block_2(ctx) { let th; let quickbutton; @@ -2228,7 +2229,7 @@ h5 > * { props: { size: "medium", song_hash: undefined, - type: /*button*/ ctx[19], + type: /*button*/ ctx[18], preview: true } }); @@ -2262,7 +2263,7 @@ h5 > * { }; } - // (168:4) {#each env.BMButton as button} + // (150:4) {#each env.BMButton as button} function create_each_block_1(ctx) { let td; let input; @@ -2278,12 +2279,12 @@ h5 > * { input = element("input"); t = space(); label = element("label"); - attr(input, "id", "show-" + /*page*/ ctx[16] + "-" + /*button*/ ctx[19]); + attr(input, "id", "show-" + /*page*/ ctx[15] + "-" + /*button*/ ctx[18]); attr(input, "type", "checkbox"); attr(input, "class", "is-checkradio"); - attr(input, "data-key", "" + (/*page*/ ctx[16] + "-" + /*button*/ ctx[19])); - input.checked = input_checked_value = /*bm*/ ctx[2][`${/*page*/ ctx[16]}-${/*button*/ ctx[19]}`]; - attr(label, "for", "show-" + /*page*/ ctx[16] + "-" + /*button*/ ctx[19]); + attr(input, "data-key", "" + (/*page*/ ctx[15] + "-" + /*button*/ ctx[18])); + input.checked = input_checked_value = /*bm*/ ctx[2][`${/*page*/ ctx[15]}-${/*button*/ ctx[18]}`]; + attr(label, "for", "show-" + /*page*/ ctx[15] + "-" + /*button*/ ctx[18]); }, m(target, anchor) { insert(target, td, anchor); @@ -2297,7 +2298,7 @@ h5 > * { } }, p(ctx, dirty) { - if (dirty & /*bm*/ 4 && input_checked_value !== (input_checked_value = /*bm*/ ctx[2][`${/*page*/ ctx[16]}-${/*button*/ ctx[19]}`])) { + if (dirty & /*bm*/ 4 && input_checked_value !== (input_checked_value = /*bm*/ ctx[2][`${/*page*/ ctx[15]}-${/*button*/ ctx[18]}`])) { input.checked = input_checked_value; } }, @@ -2309,11 +2310,11 @@ h5 > * { }; } - // (165:2) {#each env.BMPage as page} + // (147:2) {#each env.BMPage as page} function create_each_block(ctx) { let tr; let td; - let t0_value = /*page*/ ctx[16] + ""; + let t0_value = /*page*/ ctx[15] + ""; let t0; let t1; let t2; @@ -2741,7 +2742,7 @@ h5 > * { each_blocks.length = each_value.length; } - if (dirty & /*isBeastSaberSyncing*/ 2) { + if (!current || dirty & /*isBeastSaberSyncing*/ 2) { toggle_class(i1, "fa-spin", /*isBeastSaberSyncing*/ ctx[1]); } }, @@ -2775,44 +2776,7 @@ h5 > * { } function instance($$self, $$props, $$invalidate) { - var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { - function adopt(value) { - return value instanceof P - ? value - : new P(function (resolve) { - resolve(value); - }); - } - - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch(e) { - reject(e); - } - } - - function rejected(value) { - try { - step(generator["throw"](value)); - } catch(e) { - reject(e); - } - } - - function step(result) { - result.done - ? resolve(result.value) - : adopt(result.value).then(fulfilled, rejected); - } - - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - var _a; - let current_theme = (_a = localStorage.getItem("theme_name")) !== null && _a !== void 0 ? _a @@ -2831,26 +2795,22 @@ h5 > * { set_use_new_ss_api(this.checked); } - function updateAllUser() { - return __awaiter(this, void 0, void 0, function* () { - yield fetch_all(); - }); + async function updateAllUser() { + await fetch_all(); } - function forceUpdateAllUser() { - return __awaiter(this, void 0, void 0, function* () { - const resp = yield show_modal({ - text: "Warning: This might take a long time, depending " + "on how many users you have in your library list and " + "how many songs they have on ScoreSaber.\n" + "Use this only when all pp is fucked again.\n" + "And have mercy on the ScoreSaber servers.", - buttons: { - ok: { text: "Continue", class: "is-success" }, - x: { text: "Cancel", class: "is-danger" } - } - }); - - if (resp === "ok") { - yield fetch_all(true); + async function forceUpdateAllUser() { + const resp = await show_modal({ + text: "Warning: This might take a long time, depending " + "on how many users you have in your library list and " + "how many songs they have on ScoreSaber.\n" + "Use this only when all pp is fucked again.\n" + "And have mercy on the ScoreSaber servers.", + buttons: { + ok: { text: "Continue", class: "is-success" }, + x: { text: "Cancel", class: "is-danger" } } }); + + if (resp === "ok") { + await fetch_all(true); + } } function onChangeBeastSaber() { @@ -2860,41 +2820,37 @@ h5 > * { let isBeastSaberSyncing = false; - function beastSaberSync() { - return __awaiter(this, void 0, void 0, function* () { - const bsaber_username = get_bsaber_username(); + async function beastSaberSync() { + const bsaber_username = get_bsaber_username(); - if (!bsaber_username) { - yield show_modal({ - text: "Please enter a username first.", - buttons: buttons.OkOnly - }); + if (!bsaber_username) { + await show_modal({ + text: "Please enter a username first.", + buttons: buttons.OkOnly + }); - return; - } + return; + } - $$invalidate(1, isBeastSaberSyncing = true); - yield update_bsaber_bookmark_cache(bsaber_username); - $$invalidate(1, isBeastSaberSyncing = false); - }); + $$invalidate(1, isBeastSaberSyncing = true); + await update_bsaber_bookmark_cache(bsaber_username); + $$invalidate(1, isBeastSaberSyncing = false); } - function update_bsaber_bookmark_cache(username) { - return __awaiter(this, void 0, void 0, function* () { - for (let page = 1; ; page++) { - SseEvent.StatusInfo.invoke({ text: `Loading BeastSaber page ${page}` }); - const bookmarks = yield get_bookmarks(username, page, 50); - if (!bookmarks) break; - process_bookmarks(bookmarks.songs); + async function update_bsaber_bookmark_cache(username) { + for (let page = 1; ; page++) { + SseEvent.StatusInfo.invoke({ text: `Loading BeastSaber page ${page}` }); + const bookmarks = await get_bookmarks(username, page, 50); + if (!bookmarks) break; + process_bookmarks(bookmarks.songs); - if (bookmarks.next_page === null) { - break; - } + if (bookmarks.next_page === null) { + break; } + } - SseEvent.StatusInfo.invoke({ - text: "Finished loading BeastSaber bookmarks" - }); + SseEvent.StatusInfo.invoke({ + text: "Finished loading BeastSaber bookmarks" }); } diff --git a/yarn.lock b/yarn.lock index c85fca3..1c30445 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,3515 +2,3351 @@ # yarn lockfile v1 -"@babel/code-frame@7.12.11": - "integrity" "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==" - "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" - "version" "7.12.11" - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/helper-validator-identifier@^7.10.4": - "integrity" "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz" - "version" "7.10.4" - -"@babel/highlight@^7.10.4": - "integrity" "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==" - "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz" - "version" "7.10.4" - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - "chalk" "^2.0.0" - "js-tokens" "^4.0.0" - -"@eslint/eslintrc@^0.3.0": - "integrity" "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==" - "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz" - "version" "0.3.0" - dependencies: - "ajv" "^6.12.4" - "debug" "^4.1.1" - "espree" "^7.3.0" - "globals" "^12.1.0" - "ignore" "^4.0.6" - "import-fresh" "^3.2.1" - "js-yaml" "^3.13.1" - "lodash" "^4.17.20" - "minimatch" "^3.0.4" - "strip-json-comments" "^3.1.1" - -"@eslint/eslintrc@^1.0.4": - "integrity" "sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q==" - "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "ajv" "^6.12.4" - "debug" "^4.3.2" - "espree" "^9.0.0" - "globals" "^13.9.0" - "ignore" "^4.0.6" - "import-fresh" "^3.2.1" - "js-yaml" "^4.1.0" - "minimatch" "^3.0.4" - "strip-json-comments" "^3.1.1" - -"@humanwhocodes/config-array@^0.6.0": - "integrity" "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz" - "version" "0.6.0" - dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - "debug" "^4.1.1" - "minimatch" "^3.0.4" - -"@humanwhocodes/object-schema@^1.2.0": - "integrity" "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - "version" "1.2.1" +"@eslint/eslintrc@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" + integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@humanwhocodes/config-array@^0.11.8": + version "0.11.8" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== "@nodelib/fs.scandir@2.1.5": - "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - "version" "2.1.5" + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" - "run-parallel" "^1.1.9" + run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": - "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - "version" "2.0.5" +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3": - "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - "version" "1.2.8" +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" - "fastq" "^1.6.0" - -"@rbnlffl/rollup-plugin-eslint@2.0.0": - "integrity" "sha512-ql5KeNKkJRdJAPpKiwoBjbYAESU1UtgYs1+YA3V9KU9uH7Eul/FNpF8rs4PkA81f61XHIXv1cMP2XOPwcdUryA==" - "resolved" "https://registry.npmjs.org/@rbnlffl/rollup-plugin-eslint/-/rollup-plugin-eslint-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "@rollup/pluginutils" "4.x" - "eslint" "7.x" - -"@rollup/plugin-commonjs@^21.0.1": - "integrity" "sha512-EA+g22lbNJ8p5kuZJUYyhhDK7WgJckW5g4pNN7n4mAFUM96VuwUnNT3xr2Db2iCZPI1pJPbGyfT5mS9T1dHfMg==" - "resolved" "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.1.tgz" - "version" "21.0.1" - dependencies: - "@rollup/pluginutils" "^3.1.0" - "commondir" "^1.0.1" - "estree-walker" "^2.0.1" - "glob" "^7.1.6" - "is-reference" "^1.2.1" - "magic-string" "^0.25.7" - "resolve" "^1.17.0" - -"@rollup/plugin-node-resolve@^13.0.4": - "integrity" "sha512-eYq4TFy40O8hjeDs+sIxEH/jc9lyuI2k9DM557WN6rO5OpnC2qXMBNj4IKH1oHrnAazL49C5p0tgP0/VpqJ+/w==" - "resolved" "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.4.tgz" - "version" "13.0.4" - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - "builtin-modules" "^3.1.0" - "deepmerge" "^4.2.2" - "is-module" "^1.0.0" - "resolve" "^1.19.0" - -"@rollup/plugin-typescript@8.3.0": - "integrity" "sha512-I5FpSvLbtAdwJ+naznv+B4sjXZUcIvLLceYpITAn7wAP8W0wqc5noLdGIp9HGVntNhRWXctwPYrSSFQxtl0FPA==" - "resolved" "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.3.0.tgz" - "version" "8.3.0" - dependencies: - "@rollup/pluginutils" "^3.1.0" - "resolve" "^1.17.0" - -"@rollup/pluginutils@^3.1.0": - "integrity" "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==" - "resolved" "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "@types/estree" "0.0.39" - "estree-walker" "^1.0.1" - "picomatch" "^2.2.2" - -"@rollup/pluginutils@4.x": - "integrity" "sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==" - "resolved" "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "estree-walker" "^2.0.1" - "picomatch" "^2.2.2" + fastq "^1.6.0" + +"@rbnlffl/rollup-plugin-eslint@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@rbnlffl/rollup-plugin-eslint/-/rollup-plugin-eslint-4.0.0.tgz#592b0d0c0700765d04794bb01d0c9b11da95cdf1" + integrity sha512-mApU2l0HVtWAGRPtsgDwroqwmZKan8Fw4VNWw5AqS2y50glToETHrTOLjtzzk4V+uG0ckYhtO1/zGmpfamo47Q== + dependencies: + "@rollup/pluginutils" "^4.2.1" + +"@rollup/plugin-commonjs@24.0.1": + version "24.0.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-24.0.1.tgz#d54ba26a3e3c495dc332bd27a81f7e9e2df46f90" + integrity sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow== + dependencies: + "@rollup/pluginutils" "^5.0.1" + commondir "^1.0.1" + estree-walker "^2.0.2" + glob "^8.0.3" + is-reference "1.2.1" + magic-string "^0.27.0" + +"@rollup/plugin-node-resolve@15.0.1": + version "15.0.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz#72be449b8e06f6367168d5b3cd5e2802e0248971" + integrity sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg== + dependencies: + "@rollup/pluginutils" "^5.0.1" + "@types/resolve" "1.20.2" + deepmerge "^4.2.2" + is-builtin-module "^3.2.0" + is-module "^1.0.0" + resolve "^1.22.1" + +"@rollup/plugin-typescript@11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-11.0.0.tgz#f136272d1df5209daca0cb6f171c574b1d505545" + integrity sha512-goPyCWBiimk1iJgSTgsehFD5OOFHiAknrRJjqFCudcW8JtWiBlK284Xnn4flqMqg6YAjVG/EE+3aVzrL5qNSzQ== + dependencies: + "@rollup/pluginutils" "^5.0.1" + resolve "^1.22.1" + +"@rollup/pluginutils@^4.1.0", "@rollup/pluginutils@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" + integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== + dependencies: + estree-walker "^2.0.1" + picomatch "^2.2.2" + +"@rollup/pluginutils@^5.0.1": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz#012b8f53c71e4f6f9cb317e311df1404f56e7a33" + integrity sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" "@types/estree@*": - "integrity" "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" - "resolved" "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz" - "version" "0.0.50" + version "0.0.50" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz" + integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== -"@types/estree@0.0.39": - "integrity" "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" - "resolved" "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" - "version" "0.0.39" +"@types/estree@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== "@types/expect@^1.20.4": - "integrity" "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==" - "resolved" "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz" - "version" "1.20.4" + version "1.20.4" + resolved "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz" + integrity sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg== "@types/json-schema@^7.0.9": - "integrity" "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" - "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz" - "version" "7.0.9" + version "7.0.9" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz" + integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== "@types/node@*": - "integrity" "sha512-p68+a+KoxpoB47015IeYZYRrdqMUcpbK8re/zpFB8Ld46LHC1lPEbp3EXgkEhAYEcPvjJF6ZO+869SQ0aH1dcA==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-15.0.2.tgz" - "version" "15.0.2" + version "15.0.2" + resolved "https://registry.npmjs.org/@types/node/-/node-15.0.2.tgz" + integrity sha512-p68+a+KoxpoB47015IeYZYRrdqMUcpbK8re/zpFB8Ld46LHC1lPEbp3EXgkEhAYEcPvjJF6ZO+869SQ0aH1dcA== -"@types/node@^14.14.41": - "integrity" "sha512-+gaugz6Oce6ZInfI/tK4Pq5wIIkJMEJUu92RB3Eu93mtj4wjjjz9EB5mLp5s1pSsLXdC/CPut/xF20ZzAQJbTA==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-14.14.44.tgz" - "version" "14.14.44" +"@types/pug@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/pug/-/pug-2.0.6.tgz#f830323c88172e66826d0bde413498b61054b5a6" + integrity sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg== -"@types/pug@^2.0.4": - "integrity" "sha512-LOnASQoeNZMkzexRuyqcBBDZ6rS+rQxUMkmj5A0PkhhiSZivLIuz6Hxyr1mkGoEZEkk66faROmpMi4fFkrKsBA==" - "resolved" "https://registry.npmjs.org/@types/pug/-/pug-2.0.5.tgz" - "version" "2.0.5" +"@types/resolve@1.20.2": + version "1.20.2" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" + integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== -"@types/resolve@1.17.1": - "integrity" "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==" - "resolved" "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz" - "version" "1.17.1" +"@types/sass@^1.43.1": + version "1.43.1" + resolved "https://registry.yarnpkg.com/@types/sass/-/sass-1.43.1.tgz#86bb0168e9e881d7dade6eba16c9ed6d25dc2f68" + integrity sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g== dependencies: "@types/node" "*" -"@types/sass@^1.16.0": - "integrity" "sha512-iZUcRrGuz/Tbg3loODpW7vrQJkUtpY2fFSf4ELqqkApcS2TkZ1msk7ie8iZPB86lDOP8QOTTmuvWjc5S0R9OjQ==" - "resolved" "https://registry.npmjs.org/@types/sass/-/sass-1.16.1.tgz" - "version" "1.16.1" - dependencies: - "@types/node" "*" +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== "@types/vinyl@^2.0.4": - "integrity" "sha512-2o6a2ixaVI2EbwBPg1QYLGQoHK56p/8X/sGfKbFC8N6sY9lfjsMf/GprtkQkSya0D4uRiutRZ2BWj7k3JvLsAQ==" - "resolved" "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.4.tgz" - "version" "2.0.4" + version "2.0.4" + resolved "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.4.tgz" + integrity sha512-2o6a2ixaVI2EbwBPg1QYLGQoHK56p/8X/sGfKbFC8N6sY9lfjsMf/GprtkQkSya0D4uRiutRZ2BWj7k3JvLsAQ== dependencies: "@types/expect" "^1.20.4" "@types/node" "*" -"@typescript-eslint/eslint-plugin@5.3.0": - "integrity" "sha512-ARUEJHJrq85aaiCqez7SANeahDsJTD3AEua34EoQN9pHS6S5Bq9emcIaGGySt/4X2zSi+vF5hAH52sEen7IO7g==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.3.0.tgz" - "version" "5.3.0" - dependencies: - "@typescript-eslint/experimental-utils" "5.3.0" - "@typescript-eslint/scope-manager" "5.3.0" - "debug" "^4.3.2" - "functional-red-black-tree" "^1.0.1" - "ignore" "^5.1.8" - "regexpp" "^3.2.0" - "semver" "^7.3.5" - "tsutils" "^3.21.0" - -"@typescript-eslint/experimental-utils@5.3.0": - "integrity" "sha512-NFVxYTjKj69qB0FM+piah1x3G/63WB8vCBMnlnEHUsiLzXSTWb9FmFn36FD9Zb4APKBLY3xRArOGSMQkuzTF1w==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.0.tgz" - "version" "5.3.0" +"@typescript-eslint/eslint-plugin@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.51.0.tgz#da3f2819633061ced84bb82c53bba45a6fe9963a" + integrity sha512-wcAwhEWm1RgNd7dxD/o+nnLW8oH+6RK1OGnmbmkj/GGoDPV1WWMVP0FXYQBivKHdwM1pwii3bt//RC62EriIUQ== + dependencies: + "@typescript-eslint/scope-manager" "5.51.0" + "@typescript-eslint/type-utils" "5.51.0" + "@typescript-eslint/utils" "5.51.0" + debug "^4.3.4" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.51.0.tgz#2d74626652096d966ef107f44b9479f02f51f271" + integrity sha512-fEV0R9gGmfpDeRzJXn+fGQKcl0inIeYobmmUWijZh9zA7bxJ8clPhV9up2ZQzATxAiFAECqPQyMDB4o4B81AaA== + dependencies: + "@typescript-eslint/scope-manager" "5.51.0" + "@typescript-eslint/types" "5.51.0" + "@typescript-eslint/typescript-estree" "5.51.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.51.0.tgz#ad3e3c2ecf762d9a4196c0fbfe19b142ac498990" + integrity sha512-gNpxRdlx5qw3yaHA0SFuTjW4rxeYhpHxt491PEcKF8Z6zpq0kMhe0Tolxt0qjlojS+/wArSDlj/LtE69xUJphQ== + dependencies: + "@typescript-eslint/types" "5.51.0" + "@typescript-eslint/visitor-keys" "5.51.0" + +"@typescript-eslint/type-utils@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.51.0.tgz#7af48005531700b62a20963501d47dfb27095988" + integrity sha512-QHC5KKyfV8sNSyHqfNa0UbTbJ6caB8uhcx2hYcWVvJAZYJRBo5HyyZfzMdRx8nvS+GyMg56fugMzzWnojREuQQ== + dependencies: + "@typescript-eslint/typescript-estree" "5.51.0" + "@typescript-eslint/utils" "5.51.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.51.0.tgz#e7c1622f46c7eea7e12bbf1edfb496d4dec37c90" + integrity sha512-SqOn0ANn/v6hFn0kjvLwiDi4AzR++CBZz0NV5AnusT2/3y32jdc0G4woXPWHCumWtUXZKPAS27/9vziSsC9jnw== + +"@typescript-eslint/typescript-estree@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.51.0.tgz#0ec8170d7247a892c2b21845b06c11eb0718f8de" + integrity sha512-TSkNupHvNRkoH9FMA3w7TazVFcBPveAAmb7Sz+kArY6sLT86PA5Vx80cKlYmd8m3Ha2SwofM1KwraF24lM9FvA== + dependencies: + "@typescript-eslint/types" "5.51.0" + "@typescript-eslint/visitor-keys" "5.51.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.51.0.tgz#074f4fabd5b12afe9c8aa6fdee881c050f8b4d47" + integrity sha512-76qs+5KWcaatmwtwsDJvBk4H76RJQBFe+Gext0EfJdC3Vd2kpY2Pf//OHHzHp84Ciw0/rYoGTDnIAr3uWhhJYw== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.3.0" - "@typescript-eslint/types" "5.3.0" - "@typescript-eslint/typescript-estree" "5.3.0" - "eslint-scope" "^5.1.1" - "eslint-utils" "^3.0.0" - -"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@5.3.0": - "integrity" "sha512-rKu/yAReip7ovx8UwOAszJVO5MgBquo8WjIQcp1gx4pYQCwYzag+I5nVNHO4MqyMkAo0gWt2gWUi+36gWAVKcw==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.3.0.tgz" - "version" "5.3.0" - dependencies: - "@typescript-eslint/scope-manager" "5.3.0" - "@typescript-eslint/types" "5.3.0" - "@typescript-eslint/typescript-estree" "5.3.0" - "debug" "^4.3.2" - -"@typescript-eslint/scope-manager@5.3.0": - "integrity" "sha512-22Uic9oRlTsPppy5Tcwfj+QET5RWEnZ5414Prby465XxQrQFZ6nnm5KnXgnsAJefG4hEgMnaxTB3kNEyjdjj6A==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.0.tgz" - "version" "5.3.0" - dependencies: - "@typescript-eslint/types" "5.3.0" - "@typescript-eslint/visitor-keys" "5.3.0" - -"@typescript-eslint/types@5.3.0": - "integrity" "sha512-fce5pG41/w8O6ahQEhXmMV+xuh4+GayzqEogN24EK+vECA3I6pUwKuLi5QbXO721EMitpQne5VKXofPonYlAQg==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.0.tgz" - "version" "5.3.0" - -"@typescript-eslint/typescript-estree@5.3.0": - "integrity" "sha512-FJ0nqcaUOpn/6Z4Jwbtf+o0valjBLkqc3MWkMvrhA2TvzFXtcclIM8F4MBEmYa2kgcI8EZeSAzwoSrIC8JYkug==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.0.tgz" - "version" "5.3.0" - dependencies: - "@typescript-eslint/types" "5.3.0" - "@typescript-eslint/visitor-keys" "5.3.0" - "debug" "^4.3.2" - "globby" "^11.0.4" - "is-glob" "^4.0.3" - "semver" "^7.3.5" - "tsutils" "^3.21.0" - -"@typescript-eslint/visitor-keys@5.3.0": - "integrity" "sha512-oVIAfIQuq0x2TFDNLVavUn548WL+7hdhxYn+9j3YdJJXB7mH9dAmZNJsPDa7Jc+B9WGqoiex7GUDbyMxV0a/aw==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.0.tgz" - "version" "5.3.0" - dependencies: - "@typescript-eslint/types" "5.3.0" - "eslint-visitor-keys" "^3.0.0" - -"acorn-jsx@^5.3.1": - "integrity" "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==" - "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz" - "version" "5.3.1" - -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^7.4.0": - "integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - "resolved" "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" - "version" "7.4.1" - -"acorn@^8.6.0": - "integrity" "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==" - "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz" - "version" "8.6.0" - -"ajv@^6.10.0", "ajv@^6.12.4": - "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" - "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - "version" "6.12.6" - dependencies: - "fast-deep-equal" "^3.1.1" - "fast-json-stable-stringify" "^2.0.0" - "json-schema-traverse" "^0.4.1" - "uri-js" "^4.2.2" - -"ajv@^7.0.2": - "integrity" "sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==" - "resolved" "https://registry.npmjs.org/ajv/-/ajv-7.1.1.tgz" - "version" "7.1.1" - dependencies: - "fast-deep-equal" "^3.1.1" - "json-schema-traverse" "^1.0.0" - "require-from-string" "^2.0.2" - "uri-js" "^4.2.2" - -"ansi-colors@^1.0.1": - "integrity" "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==" - "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "ansi-wrap" "^0.1.0" - -"ansi-colors@^4.1.1": - "integrity" "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" - "version" "4.1.1" - -"ansi-gray@^0.1.1": - "integrity" "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=" - "resolved" "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz" - "version" "0.1.1" - dependencies: - "ansi-wrap" "0.1.0" - -"ansi-regex@^2.0.0": - "integrity" "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" - "version" "2.1.1" - -"ansi-regex@^5.0.1": - "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - "version" "5.0.1" - -"ansi-styles@^3.2.1": - "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - "version" "3.2.1" - dependencies: - "color-convert" "^1.9.0" - -"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": - "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "color-convert" "^2.0.1" - -"ansi-wrap@^0.1.0", "ansi-wrap@0.1.0": - "integrity" "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" - "resolved" "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz" - "version" "0.1.0" - -"anymatch@^2.0.0": - "integrity" "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==" - "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "micromatch" "^3.1.4" - "normalize-path" "^2.1.1" - -"append-buffer@^1.0.2": - "integrity" "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=" - "resolved" "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "buffer-equal" "^1.0.0" - -"archy@^1.0.0": - "integrity" "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" - "resolved" "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" - "version" "1.0.0" - -"argparse@^1.0.7": - "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" - "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - "version" "1.0.10" - dependencies: - "sprintf-js" "~1.0.2" - -"argparse@^2.0.1": - "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - "version" "2.0.1" - -"arr-diff@^4.0.0": - "integrity" "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - "resolved" "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" - "version" "4.0.0" - -"arr-filter@^1.1.1": - "integrity" "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=" - "resolved" "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "make-iterator" "^1.0.0" - -"arr-flatten@^1.0.1", "arr-flatten@^1.1.0": - "integrity" "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - "resolved" "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" - "version" "1.1.0" - -"arr-map@^2.0.0", "arr-map@^2.0.2": - "integrity" "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=" - "resolved" "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "make-iterator" "^1.0.0" - -"arr-union@^3.1.0": - "integrity" "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - "resolved" "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" - "version" "3.1.0" - -"array-each@^1.0.0", "array-each@^1.0.1": - "integrity" "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=" - "resolved" "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz" - "version" "1.0.1" - -"array-initial@^1.0.0": - "integrity" "sha1-L6dLJnOTccOUe9enrcc74zSz15U=" - "resolved" "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "array-slice" "^1.0.0" - "is-number" "^4.0.0" - -"array-last@^1.1.1": - "integrity" "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==" - "resolved" "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "is-number" "^4.0.0" - -"array-slice@^1.0.0": - "integrity" "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==" - "resolved" "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz" - "version" "1.1.0" - -"array-sort@^1.0.0": - "integrity" "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==" - "resolved" "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "default-compare" "^1.0.0" - "get-value" "^2.0.6" - "kind-of" "^5.0.2" - -"array-union@^2.1.0": - "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - "version" "2.1.0" - -"array-unique@^0.3.2": - "integrity" "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - "resolved" "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" - "version" "0.3.2" - -"assign-symbols@^1.0.0": - "integrity" "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - "resolved" "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" - "version" "1.0.0" - -"astral-regex@^2.0.0": - "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" - "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" - "version" "2.0.0" - -"async-done@^1.2.0", "async-done@^1.2.2": - "integrity" "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==" - "resolved" "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "end-of-stream" "^1.1.0" - "once" "^1.3.2" - "process-nextick-args" "^2.0.0" - "stream-exhaust" "^1.0.1" - -"async-each@^1.0.1": - "integrity" "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - "resolved" "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz" - "version" "1.0.3" - -"async-settle@^1.0.0": - "integrity" "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=" - "resolved" "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "async-done" "^1.2.2" - -"atob@^2.1.2": - "integrity" "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - "resolved" "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" - "version" "2.1.2" - -"bach@^1.0.0": - "integrity" "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=" - "resolved" "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "arr-filter" "^1.1.1" - "arr-flatten" "^1.0.1" - "arr-map" "^2.0.0" - "array-each" "^1.0.0" - "array-initial" "^1.0.0" - "array-last" "^1.1.1" - "async-done" "^1.2.2" - "async-settle" "^1.0.0" - "now-and-later" "^2.0.0" - -"balanced-match@^1.0.0": - "integrity" "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" - "version" "1.0.0" - -"base@^0.11.1": - "integrity" "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==" - "resolved" "https://registry.npmjs.org/base/-/base-0.11.2.tgz" - "version" "0.11.2" - dependencies: - "cache-base" "^1.0.1" - "class-utils" "^0.3.5" - "component-emitter" "^1.2.1" - "define-property" "^1.0.0" - "isobject" "^3.0.1" - "mixin-deep" "^1.2.0" - "pascalcase" "^0.1.1" - -"binary-extensions@^1.0.0": - "integrity" "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" - "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz" - "version" "1.13.1" - -"binaryextensions@^2.2.0": - "integrity" "sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==" - "resolved" "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.3.0.tgz" - "version" "2.3.0" - -"brace-expansion@^1.1.7": - "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" - "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - "version" "1.1.11" - dependencies: - "balanced-match" "^1.0.0" - "concat-map" "0.0.1" - -"braces@^2.3.1", "braces@^2.3.2": - "integrity" "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==" - "resolved" "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" - "version" "2.3.2" - dependencies: - "arr-flatten" "^1.1.0" - "array-unique" "^0.3.2" - "extend-shallow" "^2.0.1" - "fill-range" "^4.0.0" - "isobject" "^3.0.1" - "repeat-element" "^1.1.2" - "snapdragon" "^0.8.1" - "snapdragon-node" "^2.0.1" - "split-string" "^3.0.2" - "to-regex" "^3.0.1" - -"braces@^3.0.1": - "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" - "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "fill-range" "^7.0.1" - -"buffer-equal@^1.0.0": - "integrity" "sha1-WWFrSYME1Var1GaWayLu2j7KX74=" - "resolved" "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz" - "version" "1.0.0" - -"buffer-from@^1.0.0": - "integrity" "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" - "version" "1.1.1" - -"builtin-modules@^3.1.0": - "integrity" "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==" - "resolved" "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz" - "version" "3.2.0" - -"cache-base@^1.0.1": - "integrity" "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==" - "resolved" "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "collection-visit" "^1.0.0" - "component-emitter" "^1.2.1" - "get-value" "^2.0.6" - "has-value" "^1.0.0" - "isobject" "^3.0.1" - "set-value" "^2.0.0" - "to-object-path" "^0.3.0" - "union-value" "^1.0.0" - "unset-value" "^1.0.0" - -"callsites@^3.0.0": - "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - "version" "3.1.0" - -"camelcase@^3.0.0": - "integrity" "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" - "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz" - "version" "3.0.0" - -"chalk@^2.0.0": - "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "ansi-styles" "^3.2.1" - "escape-string-regexp" "^1.0.5" - "supports-color" "^5.3.0" - -"chalk@^4.0.0": - "integrity" "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "ansi-styles" "^4.1.0" - "supports-color" "^7.1.0" - -"chokidar@^2.0.0": - "integrity" "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==" - "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz" - "version" "2.1.8" - dependencies: - "anymatch" "^2.0.0" - "async-each" "^1.0.1" - "braces" "^2.3.2" - "glob-parent" "^3.1.0" - "inherits" "^2.0.3" - "is-binary-path" "^1.0.0" - "is-glob" "^4.0.0" - "normalize-path" "^3.0.0" - "path-is-absolute" "^1.0.0" - "readdirp" "^2.2.1" - "upath" "^1.1.1" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.51.0" + "@typescript-eslint/types" "5.51.0" + "@typescript-eslint/typescript-estree" "5.51.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.51.0.tgz#c0147dd9a36c0de758aaebd5b48cae1ec59eba87" + integrity sha512-Oh2+eTdjHjOFjKA27sxESlA87YPSOJafGCR0md5oeMdh1ZcCfAGCIOL216uTBAkAIptvLIfKQhl7lHxMJet4GQ== + dependencies: + "@typescript-eslint/types" "5.51.0" + eslint-visitor-keys "^3.3.0" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-colors@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz" + integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== + dependencies: + ansi-wrap "^0.1.0" + +ansi-gray@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz" + integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE= + dependencies: + ansi-wrap "0.1.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-wrap@0.1.0, ansi-wrap@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz" + integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +append-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz" + integrity sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE= + dependencies: + buffer-equal "^1.0.0" + +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-filter@^1.1.1: + version "1.1.2" + resolved "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz" + integrity sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4= + dependencies: + make-iterator "^1.0.0" + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-map@^2.0.0, arr-map@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz" + integrity sha1-Onc0X/wc814qkYJWAfnljy4kysQ= + dependencies: + make-iterator "^1.0.0" + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-each@^1.0.0, array-each@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz" + integrity sha1-p5SvDAWrF1KEbudTofIRoFugxE8= + +array-initial@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz" + integrity sha1-L6dLJnOTccOUe9enrcc74zSz15U= + dependencies: + array-slice "^1.0.0" + is-number "^4.0.0" + +array-last@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz" + integrity sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg== + dependencies: + is-number "^4.0.0" + +array-slice@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz" + integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== + +array-sort@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz" + integrity sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg== + dependencies: + default-compare "^1.0.0" + get-value "^2.0.6" + kind-of "^5.0.2" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +async-done@^1.2.0, async-done@^1.2.2: + version "1.3.2" + resolved "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz" + integrity sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.2" + process-nextick-args "^2.0.0" + stream-exhaust "^1.0.1" + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-settle@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz" + integrity sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs= + dependencies: + async-done "^1.2.2" + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +bach@^1.0.0: + version "1.2.0" + resolved "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz" + integrity sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA= + dependencies: + arr-filter "^1.1.1" + arr-flatten "^1.0.1" + arr-map "^2.0.0" + array-each "^1.0.0" + array-initial "^1.0.0" + array-last "^1.1.1" + async-done "^1.2.2" + async-settle "^1.0.0" + now-and-later "^2.0.0" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binaryextensions@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.3.0.tgz" + integrity sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +buffer-crc32@^0.2.5: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +buffer-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz" + integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz" + integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= + +chalk@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^2.0.0: + version "2.1.8" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" optionalDependencies: - "fsevents" "^1.2.7" - -"class-utils@^0.3.5": - "integrity" "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==" - "resolved" "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" - "version" "0.3.6" - dependencies: - "arr-union" "^3.1.0" - "define-property" "^0.2.5" - "isobject" "^3.0.0" - "static-extend" "^0.1.1" - -"cliui@^3.2.0": - "integrity" "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=" - "resolved" "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz" - "version" "3.2.0" - dependencies: - "string-width" "^1.0.1" - "strip-ansi" "^3.0.1" - "wrap-ansi" "^2.0.0" - -"clone-buffer@^1.0.0": - "integrity" "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" - "resolved" "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz" - "version" "1.0.0" - -"clone-stats@^1.0.0": - "integrity" "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" - "resolved" "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz" - "version" "1.0.0" - -"clone@^2.1.1": - "integrity" "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" - "resolved" "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" - "version" "2.1.2" - -"cloneable-readable@^1.0.0": - "integrity" "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==" - "resolved" "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "inherits" "^2.0.1" - "process-nextick-args" "^2.0.0" - "readable-stream" "^2.3.5" - -"code-point-at@^1.0.0": - "integrity" "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - "resolved" "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" - "version" "1.1.0" - -"collection-map@^1.0.0": - "integrity" "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=" - "resolved" "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "arr-map" "^2.0.2" - "for-own" "^1.0.0" - "make-iterator" "^1.0.0" - -"collection-visit@^1.0.0": - "integrity" "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=" - "resolved" "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "map-visit" "^1.0.0" - "object-visit" "^1.0.0" - -"color-convert@^1.9.0": - "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - "version" "1.9.3" - dependencies: - "color-name" "1.1.3" - -"color-convert@^2.0.1": - "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "color-name" "~1.1.4" - -"color-name@~1.1.4": - "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - "version" "1.1.4" - -"color-name@1.1.3": - "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - "version" "1.1.3" - -"color-support@^1.1.3": - "integrity" "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" - "resolved" "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" - "version" "1.1.3" - -"commondir@^1.0.1": - "integrity" "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - "resolved" "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" - "version" "1.0.1" - -"component-emitter@^1.2.1": - "integrity" "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - "resolved" "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" - "version" "1.3.0" - -"concat-map@0.0.1": - "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - "version" "0.0.1" - -"concat-stream@^1.6.0": - "integrity" "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==" - "resolved" "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" - "version" "1.6.2" - dependencies: - "buffer-from" "^1.0.0" - "inherits" "^2.0.3" - "readable-stream" "^2.2.2" - "typedarray" "^0.0.6" - -"concat-with-sourcemaps@^1.0.0": - "integrity" "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==" - "resolved" "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "source-map" "^0.6.1" - -"convert-source-map@^1.5.0": - "integrity" "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==" - "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz" - "version" "1.7.0" - dependencies: - "safe-buffer" "~5.1.1" - -"copy-descriptor@^0.1.0": - "integrity" "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - "resolved" "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" - "version" "0.1.1" - -"copy-props@^2.0.1": - "integrity" "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==" - "resolved" "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz" - "version" "2.0.4" - dependencies: - "each-props" "^1.3.0" - "is-plain-object" "^2.0.1" - -"core-util-is@~1.0.0": - "integrity" "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - "version" "1.0.2" - -"cross-spawn@^7.0.2": - "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" - "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - "version" "7.0.3" - dependencies: - "path-key" "^3.1.0" - "shebang-command" "^2.0.0" - "which" "^2.0.1" - -"d@^1.0.1", "d@1": - "integrity" "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==" - "resolved" "https://registry.npmjs.org/d/-/d-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "es5-ext" "^0.10.50" - "type" "^1.0.1" - -"debug@^2.2.0": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"debug@^2.3.3": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"debug@^4.0.1", "debug@^4.1.1", "debug@^4.3.2": - "integrity" "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" - "version" "4.3.2" - dependencies: - "ms" "2.1.2" - -"decamelize@^1.1.1": - "integrity" "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - "version" "1.2.0" - -"decode-uri-component@^0.2.0": - "integrity" "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - "resolved" "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" - "version" "0.2.0" - -"deep-is@^0.1.3": - "integrity" "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" - "version" "0.1.3" + fsevents "^1.2.7" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +clone-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz" + integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= + +clone-stats@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz" + integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= + +clone@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + +cloneable-readable@^1.0.0: + version "1.1.3" + resolved "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz" + integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== + dependencies: + inherits "^2.0.1" + process-nextick-args "^2.0.0" + readable-stream "^2.3.5" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-map@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz" + integrity sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw= + dependencies: + arr-map "^2.0.2" + for-own "^1.0.0" + make-iterator "^1.0.0" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.6.0: + version "1.6.2" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +concat-with-sourcemaps@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz" + integrity sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg== + dependencies: + source-map "^0.6.1" + +convert-source-map@^1.5.0: + version "1.7.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copy-props@^2.0.1: + version "2.0.4" + resolved "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz" + integrity sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A== + dependencies: + each-props "^1.3.0" + is-plain-object "^2.0.1" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/d/-/d-1.0.1.tgz" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4.1.1, debug@^4.3.2: + version "4.3.2" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + +debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decamelize@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -"deepmerge@^4.2.2": - "integrity" "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" - "version" "4.2.2" - -"default-compare@^1.0.0": - "integrity" "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==" - "resolved" "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "kind-of" "^5.0.2" +deep-is@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -"default-resolution@^2.0.0": - "integrity" "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=" - "resolved" "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz" - "version" "2.0.0" +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== -"define-properties@^1.1.2": - "integrity" "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" - "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" - "version" "1.1.3" +default-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz" + integrity sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ== dependencies: - "object-keys" "^1.0.12" - -"define-property@^0.2.5": - "integrity" "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=" - "resolved" "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" - "version" "0.2.5" - dependencies: - "is-descriptor" "^0.1.0" - -"define-property@^1.0.0": - "integrity" "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=" - "resolved" "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "is-descriptor" "^1.0.0" - -"define-property@^2.0.2": - "integrity" "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==" - "resolved" "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "is-descriptor" "^1.0.2" - "isobject" "^3.0.1" + kind-of "^5.0.2" -"detect-file@^1.0.0": - "integrity" "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" - "resolved" "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz" - "version" "1.0.0" +default-resolution@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz" + integrity sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ= -"detect-indent@^6.0.0": - "integrity" "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==" - "resolved" "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" - "version" "6.1.0" - -"dir-glob@^3.0.1": - "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" - "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "path-type" "^4.0.0" - -"doctrine@^3.0.0": - "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" - "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - "version" "3.0.0" +define-properties@^1.1.2: + version "1.1.3" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: - "esutils" "^2.0.2" - -"duplexify@^3.6.0": - "integrity" "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==" - "resolved" "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz" - "version" "3.7.1" - dependencies: - "end-of-stream" "^1.0.0" - "inherits" "^2.0.1" - "readable-stream" "^2.0.0" - "stream-shift" "^1.0.0" - -"each-props@^1.3.0": - "integrity" "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==" - "resolved" "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "is-plain-object" "^2.0.1" - "object.defaults" "^1.1.0" - -"emoji-regex@^8.0.0": - "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - "version" "8.0.0" - -"end-of-stream@^1.0.0", "end-of-stream@^1.1.0": - "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==" - "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" - "version" "1.4.4" - dependencies: - "once" "^1.4.0" + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" -"enquirer@^2.3.5": - "integrity" "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==" - "resolved" "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" - "version" "2.3.6" +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + +detect-indent@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" + integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: - "ansi-colors" "^4.1.1" - -"error-ex@^1.2.0": - "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" - "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "is-arrayish" "^0.2.1" - -"es5-ext@^0.10.35", "es5-ext@^0.10.46", "es5-ext@^0.10.50": - "integrity" "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==" - "resolved" "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz" - "version" "0.10.53" - dependencies: - "es6-iterator" "~2.0.3" - "es6-symbol" "~3.1.3" - "next-tick" "~1.0.0" - -"es6-iterator@^2.0.1", "es6-iterator@^2.0.3", "es6-iterator@~2.0.3": - "integrity" "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=" - "resolved" "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" - "version" "2.0.3" - dependencies: - "d" "1" - "es5-ext" "^0.10.35" - "es6-symbol" "^3.1.1" - -"es6-symbol@^3.1.1", "es6-symbol@~3.1.3": - "integrity" "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==" - "resolved" "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" - "version" "3.1.3" - dependencies: - "d" "^1.0.1" - "ext" "^1.1.2" - -"es6-weak-map@^2.0.1": - "integrity" "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==" - "resolved" "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz" - "version" "2.0.3" - dependencies: - "d" "1" - "es5-ext" "^0.10.46" - "es6-iterator" "^2.0.3" - "es6-symbol" "^3.1.1" - -"escape-string-regexp@^1.0.3", "escape-string-regexp@^1.0.5": - "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - "version" "1.0.5" - -"escape-string-regexp@^4.0.0": - "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - "version" "4.0.0" - -"eslint-scope@^5.1.1": - "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==" - "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - "version" "5.1.1" - dependencies: - "esrecurse" "^4.3.0" - "estraverse" "^4.1.1" - -"eslint-scope@^6.0.0": - "integrity" "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==" - "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "esrecurse" "^4.3.0" - "estraverse" "^5.2.0" - -"eslint-utils@^2.1.0": - "integrity" "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==" - "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "eslint-visitor-keys" "^1.1.0" - -"eslint-utils@^3.0.0": - "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==" - "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "eslint-visitor-keys" "^2.0.0" - -"eslint-visitor-keys@^1.1.0": - "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" - "version" "1.3.0" - -"eslint-visitor-keys@^1.3.0": - "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" - "version" "1.3.0" - -"eslint-visitor-keys@^2.0.0": - "integrity" "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" - "version" "2.0.0" - -"eslint-visitor-keys@^3.0.0", "eslint-visitor-keys@^3.1.0": - "integrity" "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz" - "version" "3.1.0" - -"eslint@*", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@>=5", "eslint@8.2.0": - "integrity" "sha512-erw7XmM+CLxTOickrimJ1SiF55jiNlVSp2qqm0NuBWPtHYQCegD5ZMaW0c3i5ytPqL+SSLaCxdvQXFPLJn+ABw==" - "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.2.0.tgz" - "version" "8.2.0" - dependencies: - "@eslint/eslintrc" "^1.0.4" - "@humanwhocodes/config-array" "^0.6.0" - "ajv" "^6.10.0" - "chalk" "^4.0.0" - "cross-spawn" "^7.0.2" - "debug" "^4.3.2" - "doctrine" "^3.0.0" - "enquirer" "^2.3.5" - "escape-string-regexp" "^4.0.0" - "eslint-scope" "^6.0.0" - "eslint-utils" "^3.0.0" - "eslint-visitor-keys" "^3.0.0" - "espree" "^9.0.0" - "esquery" "^1.4.0" - "esutils" "^2.0.2" - "fast-deep-equal" "^3.1.3" - "file-entry-cache" "^6.0.1" - "functional-red-black-tree" "^1.0.1" - "glob-parent" "^6.0.1" - "globals" "^13.6.0" - "ignore" "^4.0.6" - "import-fresh" "^3.0.0" - "imurmurhash" "^0.1.4" - "is-glob" "^4.0.0" - "js-yaml" "^4.1.0" - "json-stable-stringify-without-jsonify" "^1.0.1" - "levn" "^0.4.1" - "lodash.merge" "^4.6.2" - "minimatch" "^3.0.4" - "natural-compare" "^1.4.0" - "optionator" "^0.9.1" - "progress" "^2.0.0" - "regexpp" "^3.2.0" - "semver" "^7.2.1" - "strip-ansi" "^6.0.1" - "strip-json-comments" "^3.1.0" - "text-table" "^0.2.0" - "v8-compile-cache" "^2.0.3" - -"eslint@7.x": - "integrity" "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==" - "resolved" "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz" - "version" "7.20.0" - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.3.0" - "ajv" "^6.10.0" - "chalk" "^4.0.0" - "cross-spawn" "^7.0.2" - "debug" "^4.0.1" - "doctrine" "^3.0.0" - "enquirer" "^2.3.5" - "eslint-scope" "^5.1.1" - "eslint-utils" "^2.1.0" - "eslint-visitor-keys" "^2.0.0" - "espree" "^7.3.1" - "esquery" "^1.4.0" - "esutils" "^2.0.2" - "file-entry-cache" "^6.0.0" - "functional-red-black-tree" "^1.0.1" - "glob-parent" "^5.0.0" - "globals" "^12.1.0" - "ignore" "^4.0.6" - "import-fresh" "^3.0.0" - "imurmurhash" "^0.1.4" - "is-glob" "^4.0.0" - "js-yaml" "^3.13.1" - "json-stable-stringify-without-jsonify" "^1.0.1" - "levn" "^0.4.1" - "lodash" "^4.17.20" - "minimatch" "^3.0.4" - "natural-compare" "^1.4.0" - "optionator" "^0.9.1" - "progress" "^2.0.0" - "regexpp" "^3.1.0" - "semver" "^7.2.1" - "strip-ansi" "^6.0.0" - "strip-json-comments" "^3.1.0" - "table" "^6.0.4" - "text-table" "^0.2.0" - "v8-compile-cache" "^2.0.3" - -"espree@^7.3.0", "espree@^7.3.1": - "integrity" "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==" - "resolved" "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz" - "version" "7.3.1" - dependencies: - "acorn" "^7.4.0" - "acorn-jsx" "^5.3.1" - "eslint-visitor-keys" "^1.3.0" - -"espree@^9.0.0": - "integrity" "sha512-ZgYLvCS1wxOczBYGcQT9DDWgicXwJ4dbocr9uYN+/eresBAUuBu+O4WzB21ufQ/JqQT8gyp7hJ3z8SHii32mTQ==" - "resolved" "https://registry.npmjs.org/espree/-/espree-9.1.0.tgz" - "version" "9.1.0" - dependencies: - "acorn" "^8.6.0" - "acorn-jsx" "^5.3.1" - "eslint-visitor-keys" "^3.1.0" - -"esprima@^4.0.0": - "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - "version" "4.0.1" - -"esquery@^1.4.0": - "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" - "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "estraverse" "^5.1.0" - -"esrecurse@^4.3.0": - "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" - "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "estraverse" "^5.2.0" - -"estraverse@^4.1.1": - "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - "version" "4.3.0" - -"estraverse@^5.1.0", "estraverse@^5.2.0": - "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" - "version" "5.2.0" - -"estree-walker@^0.6.1": - "integrity" "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" - "resolved" "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz" - "version" "0.6.1" - -"estree-walker@^1.0.1": - "integrity" "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" - "resolved" "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz" - "version" "1.0.1" - -"estree-walker@^2.0.1": - "integrity" "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - "resolved" "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" - "version" "2.0.2" - -"esutils@^2.0.2": - "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - "version" "2.0.3" - -"expand-brackets@^2.1.4": - "integrity" "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=" - "resolved" "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" - "version" "2.1.4" - dependencies: - "debug" "^2.3.3" - "define-property" "^0.2.5" - "extend-shallow" "^2.0.1" - "posix-character-classes" "^0.1.0" - "regex-not" "^1.0.0" - "snapdragon" "^0.8.1" - "to-regex" "^3.0.1" - -"expand-tilde@^2.0.0", "expand-tilde@^2.0.2": - "integrity" "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=" - "resolved" "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "homedir-polyfill" "^1.0.1" - -"ext@^1.1.2": - "integrity" "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==" - "resolved" "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "type" "^2.0.0" - -"extend-shallow@^2.0.1": - "integrity" "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=" - "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "is-extendable" "^0.1.0" - -"extend-shallow@^3.0.0": - "integrity" "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=" - "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "assign-symbols" "^1.0.0" - "is-extendable" "^1.0.1" - -"extend-shallow@^3.0.2": - "integrity" "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=" - "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "assign-symbols" "^1.0.0" - "is-extendable" "^1.0.1" - -"extend@^3.0.0": - "integrity" "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - "resolved" "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" - "version" "3.0.2" - -"extglob@^2.0.4": - "integrity" "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==" - "resolved" "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" - "version" "2.0.4" - dependencies: - "array-unique" "^0.3.2" - "define-property" "^1.0.0" - "expand-brackets" "^2.1.4" - "extend-shallow" "^2.0.1" - "fragment-cache" "^0.2.1" - "regex-not" "^1.0.0" - "snapdragon" "^0.8.1" - "to-regex" "^3.0.1" - -"fancy-log@^1.3.2": - "integrity" "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==" - "resolved" "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz" - "version" "1.3.3" - dependencies: - "ansi-gray" "^0.1.1" - "color-support" "^1.1.3" - "parse-node-version" "^1.0.0" - "time-stamp" "^1.0.0" - -"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": - "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - "version" "3.1.3" - -"fast-glob@^3.1.1": - "integrity" "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==" - "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" - "version" "3.2.7" + path-type "^4.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +each-props@^1.3.0: + version "1.3.2" + resolved "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz" + integrity sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA== + dependencies: + is-plain-object "^2.0.1" + object.defaults "^1.1.0" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@^2.0.1, es6-iterator@^2.0.3, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-promise@^3.1.2: + version "3.3.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" + integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== + +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +es6-weak-map@^2.0.1: + version "2.0.3" + resolved "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + +escape-string-regexp@^1.0.3: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@8.34.0: + version "8.34.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.34.0.tgz#fe0ab0ef478104c1f9ebc5537e303d25a8fb22d6" + integrity sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg== + dependencies: + "@eslint/eslintrc" "^1.4.1" + "@humanwhocodes/config-array" "^0.11.8" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.4.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +estree-walker@^2.0.1, estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fancy-log@^1.3.2: + version "1.3.3" + resolved "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz" + integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== + dependencies: + ansi-gray "^0.1.1" + color-support "^1.1.3" + parse-node-version "^1.0.0" + time-stamp "^1.0.0" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - "glob-parent" "^5.1.2" - "merge2" "^1.3.0" - "micromatch" "^4.0.4" - -"fast-json-stable-stringify@^2.0.0": - "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - "version" "2.1.0" - -"fast-levenshtein@^2.0.6": - "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - "version" "2.0.6" - -"fastq@^1.6.0": - "integrity" "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==" - "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" - "version" "1.13.0" - dependencies: - "reusify" "^1.0.4" - -"file-entry-cache@^6.0.0", "file-entry-cache@^6.0.1": - "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" - "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "flat-cache" "^3.0.4" - -"fill-range@^4.0.0": - "integrity" "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=" - "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "extend-shallow" "^2.0.1" - "is-number" "^3.0.0" - "repeat-string" "^1.6.1" - "to-regex-range" "^2.1.0" - -"fill-range@^7.0.1": - "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" - "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "to-regex-range" "^5.0.1" - -"find-up@^1.0.0": - "integrity" "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "path-exists" "^2.0.0" - "pinkie-promise" "^2.0.0" - -"findup-sync@^2.0.0": - "integrity" "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=" - "resolved" "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "detect-file" "^1.0.0" - "is-glob" "^3.1.0" - "micromatch" "^3.0.4" - "resolve-dir" "^1.0.1" - -"findup-sync@^3.0.0": - "integrity" "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==" - "resolved" "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "detect-file" "^1.0.0" - "is-glob" "^4.0.0" - "micromatch" "^3.0.4" - "resolve-dir" "^1.0.1" - -"fined@^1.0.1": - "integrity" "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==" - "resolved" "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "expand-tilde" "^2.0.2" - "is-plain-object" "^2.0.3" - "object.defaults" "^1.1.0" - "object.pick" "^1.2.0" - "parse-filepath" "^1.0.1" - -"flagged-respawn@^1.0.0": - "integrity" "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==" - "resolved" "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz" - "version" "1.0.1" - -"flat-cache@^3.0.4": - "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" - "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "flatted" "^3.1.0" - "rimraf" "^3.0.2" - -"flatted@^3.1.0": - "integrity" "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==" - "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" - "version" "3.1.1" - -"flush-write-stream@^1.0.2": - "integrity" "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==" - "resolved" "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "inherits" "^2.0.3" - "readable-stream" "^2.3.6" - -"for-in@^1.0.1", "for-in@^1.0.2": - "integrity" "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - "resolved" "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" - "version" "1.0.2" - -"for-own@^1.0.0": - "integrity" "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=" - "resolved" "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "for-in" "^1.0.1" - -"fragment-cache@^0.2.1": - "integrity" "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=" - "resolved" "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" - "version" "0.2.1" - dependencies: - "map-cache" "^0.2.2" - -"fs-mkdirp-stream@^1.0.0": - "integrity" "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=" - "resolved" "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "graceful-fs" "^4.1.11" - "through2" "^2.0.3" - -"fs.realpath@^1.0.0": - "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - "version" "1.0.0" - -"function-bind@^1.1.1": - "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - "version" "1.1.1" - -"functional-red-black-tree@^1.0.1": - "integrity" "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - "version" "1.0.1" - -"get-caller-file@^1.0.1": - "integrity" "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz" - "version" "1.0.3" - -"get-value@^2.0.3", "get-value@^2.0.6": - "integrity" "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - "resolved" "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" - "version" "2.0.6" - -"glob-parent@^3.1.0": - "integrity" "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "is-glob" "^3.1.0" - "path-dirname" "^1.0.0" - -"glob-parent@^5.0.0": - "integrity" "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz" - "version" "5.1.1" - dependencies: - "is-glob" "^4.0.1" - -"glob-parent@^5.1.2": - "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - "version" "5.1.2" - dependencies: - "is-glob" "^4.0.1" - -"glob-parent@^6.0.1": - "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "is-glob" "^4.0.3" - -"glob-stream@^6.1.0": - "integrity" "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=" - "resolved" "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "extend" "^3.0.0" - "glob" "^7.1.1" - "glob-parent" "^3.1.0" - "is-negated-glob" "^1.0.0" - "ordered-read-streams" "^1.0.0" - "pumpify" "^1.3.5" - "readable-stream" "^2.1.5" - "remove-trailing-separator" "^1.0.1" - "to-absolute-glob" "^2.0.0" - "unique-stream" "^2.0.2" - -"glob-watcher@^5.0.3": - "integrity" "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==" - "resolved" "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz" - "version" "5.0.5" - dependencies: - "anymatch" "^2.0.0" - "async-done" "^1.2.0" - "chokidar" "^2.0.0" - "is-negated-glob" "^1.0.0" - "just-debounce" "^1.0.0" - "normalize-path" "^3.0.0" - "object.defaults" "^1.1.0" - -"glob@^7.1.1", "glob@^7.1.3": - "integrity" "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" - "version" "7.1.6" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.0.4" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"glob@^7.1.6": - "integrity" "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" - "version" "7.1.7" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.0.4" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"global-modules@^1.0.0": - "integrity" "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==" - "resolved" "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "global-prefix" "^1.0.1" - "is-windows" "^1.0.1" - "resolve-dir" "^1.0.0" - -"global-prefix@^1.0.1": - "integrity" "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=" - "resolved" "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "expand-tilde" "^2.0.2" - "homedir-polyfill" "^1.0.1" - "ini" "^1.3.4" - "is-windows" "^1.0.1" - "which" "^1.2.14" - -"globals@^12.1.0": - "integrity" "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==" - "resolved" "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz" - "version" "12.4.0" - dependencies: - "type-fest" "^0.8.1" - -"globals@^13.6.0": - "integrity" "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==" - "resolved" "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz" - "version" "13.12.0" - dependencies: - "type-fest" "^0.20.2" - -"globals@^13.9.0": - "integrity" "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==" - "resolved" "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz" - "version" "13.12.0" - dependencies: - "type-fest" "^0.20.2" - -"globby@^11.0.4": - "integrity" "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==" - "resolved" "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz" - "version" "11.0.4" - dependencies: - "array-union" "^2.1.0" - "dir-glob" "^3.0.1" - "fast-glob" "^3.1.1" - "ignore" "^5.1.4" - "merge2" "^1.3.0" - "slash" "^3.0.0" - -"glogg@^1.0.0": - "integrity" "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==" - "resolved" "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "sparkles" "^1.0.0" - -"graceful-fs@^4.0.0", "graceful-fs@^4.1.11", "graceful-fs@^4.1.2", "graceful-fs@^4.1.6": - "integrity" "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz" - "version" "4.2.4" - -"gulp-cli@^2.2.0": - "integrity" "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==" - "resolved" "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz" - "version" "2.3.0" - dependencies: - "ansi-colors" "^1.0.1" - "archy" "^1.0.0" - "array-sort" "^1.0.0" - "color-support" "^1.1.3" - "concat-stream" "^1.6.0" - "copy-props" "^2.0.1" - "fancy-log" "^1.3.2" - "gulplog" "^1.0.0" - "interpret" "^1.4.0" - "isobject" "^3.0.1" - "liftoff" "^3.1.0" - "matchdep" "^2.0.0" - "mute-stdout" "^1.0.0" - "pretty-hrtime" "^1.0.0" - "replace-homedir" "^1.0.0" - "semver-greatest-satisfied-range" "^1.1.0" - "v8flags" "^3.2.0" - "yargs" "^7.1.0" - -"gulp-concat@2.6.1": - "integrity" "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=" - "resolved" "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz" - "version" "2.6.1" - dependencies: - "concat-with-sourcemaps" "^1.0.0" - "through2" "^2.0.0" - "vinyl" "^2.0.0" - -"gulp-replace@1.1.3": - "integrity" "sha512-HcPHpWY4XdF8zxYkDODHnG2+7a3nD/Y8Mfu3aBgMiCFDW3X2GiOKXllsAmILcxe3KZT2BXoN18WrpEFm48KfLQ==" - "resolved" "https://registry.npmjs.org/gulp-replace/-/gulp-replace-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "@types/node" "^14.14.41" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +findup-sync@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz" + integrity sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw= + dependencies: + detect-file "^1.0.0" + is-glob "^3.1.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +findup-sync@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +fined@^1.0.1: + version "1.2.0" + resolved "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz" + integrity sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng== + dependencies: + expand-tilde "^2.0.2" + is-plain-object "^2.0.3" + object.defaults "^1.1.0" + object.pick "^1.2.0" + parse-filepath "^1.0.1" + +flagged-respawn@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz" + integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + +flush-write-stream@^1.0.2: + version "1.1.1" + resolved "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +for-in@^1.0.1, for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +for-own@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz" + integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= + dependencies: + for-in "^1.0.1" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fs-mkdirp-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz" + integrity sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= + dependencies: + graceful-fs "^4.1.11" + through2 "^2.0.3" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-stream@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz" + integrity sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= + dependencies: + extend "^3.0.0" + glob "^7.1.1" + glob-parent "^3.1.0" + is-negated-glob "^1.0.0" + ordered-read-streams "^1.0.0" + pumpify "^1.3.5" + readable-stream "^2.1.5" + remove-trailing-separator "^1.0.1" + to-absolute-glob "^2.0.0" + unique-stream "^2.0.2" + +glob-watcher@^5.0.3: + version "5.0.5" + resolved "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz" + integrity sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw== + dependencies: + anymatch "^2.0.0" + async-done "^1.2.0" + chokidar "^2.0.0" + is-negated-glob "^1.0.0" + just-debounce "^1.0.0" + normalize-path "^3.0.0" + object.defaults "^1.1.0" + +glob@^7.1.1, glob@^7.1.3: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +globals@^13.19.0: + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + dependencies: + type-fest "^0.20.2" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +glogg@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz" + integrity sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA== + dependencies: + sparkles "^1.0.0" + +graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.2.4" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +graceful-fs@^4.1.3: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +gulp-cli@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz" + integrity sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A== + dependencies: + ansi-colors "^1.0.1" + archy "^1.0.0" + array-sort "^1.0.0" + color-support "^1.1.3" + concat-stream "^1.6.0" + copy-props "^2.0.1" + fancy-log "^1.3.2" + gulplog "^1.0.0" + interpret "^1.4.0" + isobject "^3.0.1" + liftoff "^3.1.0" + matchdep "^2.0.0" + mute-stdout "^1.0.0" + pretty-hrtime "^1.0.0" + replace-homedir "^1.0.0" + semver-greatest-satisfied-range "^1.1.0" + v8flags "^3.2.0" + yargs "^7.1.0" + +gulp-concat@2.6.1: + version "2.6.1" + resolved "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz" + integrity sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M= + dependencies: + concat-with-sourcemaps "^1.0.0" + through2 "^2.0.0" + vinyl "^2.0.0" + +gulp-replace@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/gulp-replace/-/gulp-replace-1.1.4.tgz#06a0e9ee36f30e343c1e0a2dd760ec32c8a3d3b2" + integrity sha512-SVSF7ikuWKhpAW4l4wapAqPPSToJoiNKsbDoUnRrSgwZHH7lH8pbPeQj1aOVYQrbZKhfSVBxVW+Py7vtulRktw== + dependencies: + "@types/node" "*" "@types/vinyl" "^2.0.4" - "istextorbinary" "^3.0.0" - "replacestream" "^4.0.3" - "yargs-parser" ">=5.0.0-security.0" - -"gulp@4.0.2": - "integrity" "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==" - "resolved" "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "glob-watcher" "^5.0.3" - "gulp-cli" "^2.2.0" - "undertaker" "^1.2.1" - "vinyl-fs" "^3.0.0" - -"gulplog@^1.0.0": - "integrity" "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=" - "resolved" "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "glogg" "^1.0.0" - -"has-flag@^3.0.0": - "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - "version" "3.0.0" - -"has-flag@^4.0.0": - "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - "version" "4.0.0" - -"has-symbols@^1.0.0": - "integrity" "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" - "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz" - "version" "1.0.1" - -"has-value@^0.3.1": - "integrity" "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=" - "resolved" "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" - "version" "0.3.1" - dependencies: - "get-value" "^2.0.3" - "has-values" "^0.1.4" - "isobject" "^2.0.0" - -"has-value@^1.0.0": - "integrity" "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=" - "resolved" "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "get-value" "^2.0.6" - "has-values" "^1.0.0" - "isobject" "^3.0.0" - -"has-values@^0.1.4": - "integrity" "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - "resolved" "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" - "version" "0.1.4" - -"has-values@^1.0.0": - "integrity" "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=" - "resolved" "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "is-number" "^3.0.0" - "kind-of" "^4.0.0" - -"has@^1.0.3": - "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" - "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "function-bind" "^1.1.1" - -"homedir-polyfill@^1.0.1": - "integrity" "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==" - "resolved" "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "parse-passwd" "^1.0.0" - -"hosted-git-info@^2.1.4": - "integrity" "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" - "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz" - "version" "2.8.8" - -"ignore@^4.0.6": - "integrity" "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" - "resolved" "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" - "version" "4.0.6" - -"ignore@^5.1.4": - "integrity" "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==" - "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz" - "version" "5.1.9" - -"ignore@^5.1.8": - "integrity" "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==" - "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz" - "version" "5.1.9" - -"import-fresh@^3.0.0", "import-fresh@^3.2.1": - "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" - "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "parent-module" "^1.0.0" - "resolve-from" "^4.0.0" - -"imurmurhash@^0.1.4": - "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - "version" "0.1.4" - -"inflight@^1.0.4": - "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" - "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - "version" "1.0.6" - dependencies: - "once" "^1.3.0" - "wrappy" "1" - -"inherits@^2.0.1", "inherits@^2.0.3", "inherits@~2.0.3", "inherits@2": - "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - "version" "2.0.4" - -"ini@^1.3.4": - "integrity" "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz" - "version" "1.3.5" - -"interpret@^1.4.0": - "integrity" "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - "resolved" "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" - "version" "1.4.0" - -"invert-kv@^1.0.0": - "integrity" "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" - "resolved" "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz" - "version" "1.0.0" - -"is-absolute@^1.0.0": - "integrity" "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==" - "resolved" "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "is-relative" "^1.0.0" - "is-windows" "^1.0.1" - -"is-accessor-descriptor@^0.1.6": - "integrity" "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=" - "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz" - "version" "0.1.6" - dependencies: - "kind-of" "^3.0.2" - -"is-accessor-descriptor@^1.0.0": - "integrity" "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==" - "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "kind-of" "^6.0.0" + istextorbinary "^3.0.0" + replacestream "^4.0.3" + yargs-parser ">=5.0.0-security.0" + +gulp@4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz" + integrity sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA== + dependencies: + glob-watcher "^5.0.3" + gulp-cli "^2.2.0" + undertaker "^1.2.1" + vinyl-fs "^3.0.0" + +gulplog@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz" + integrity sha1-4oxNRdBey77YGDY86PnFkmIp/+U= + dependencies: + glogg "^1.0.0" + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.4: + version "1.3.5" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +interpret@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + +is-absolute@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz" + integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== + dependencies: + is-relative "^1.0.0" + is-windows "^1.0.1" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -"is-arrayish@^0.2.1": - "integrity" "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - "version" "0.2.1" - -"is-binary-path@^1.0.0": - "integrity" "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=" - "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "binary-extensions" "^1.0.0" - -"is-buffer@^1.1.5": - "integrity" "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" - "version" "1.1.6" - -"is-core-module@^2.2.0": - "integrity" "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==" - "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz" - "version" "2.2.0" - dependencies: - "has" "^1.0.3" - -"is-data-descriptor@^0.1.4": - "integrity" "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=" - "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz" - "version" "0.1.4" - dependencies: - "kind-of" "^3.0.2" - -"is-data-descriptor@^1.0.0": - "integrity" "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==" - "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "kind-of" "^6.0.0" - -"is-descriptor@^0.1.0": - "integrity" "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==" - "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" - "version" "0.1.6" - dependencies: - "is-accessor-descriptor" "^0.1.6" - "is-data-descriptor" "^0.1.4" - "kind-of" "^5.0.0" - -"is-descriptor@^1.0.0", "is-descriptor@^1.0.2": - "integrity" "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==" - "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" - "version" "1.0.2" +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= dependencies: - "is-accessor-descriptor" "^1.0.0" - "is-data-descriptor" "^1.0.0" - "kind-of" "^6.0.2" + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -"is-extendable@^0.1.0", "is-extendable@^0.1.1": - "integrity" "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" - "version" "0.1.1" +is-builtin-module@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" + integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== + dependencies: + builtin-modules "^3.3.0" -"is-extendable@^1.0.1": - "integrity" "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==" - "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" - "version" "1.0.1" +is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: - "is-plain-object" "^2.0.4" + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" -"is-extglob@^2.1.0", "is-extglob@^2.1.1": - "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - "version" "2.1.1" +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= -"is-fullwidth-code-point@^1.0.0": - "integrity" "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" - "version" "1.0.0" +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== dependencies: - "number-is-nan" "^1.0.0" + is-plain-object "^2.0.4" -"is-fullwidth-code-point@^3.0.0": - "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - "version" "3.0.0" +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -"is-glob@^3.1.0": - "integrity" "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=" - "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz" - "version" "3.1.0" +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= dependencies: - "is-extglob" "^2.1.0" + number-is-nan "^1.0.0" -"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@^4.0.3": - "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" - "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - "version" "4.0.3" +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= dependencies: - "is-extglob" "^2.1.1" + is-extglob "^2.1.0" -"is-module@^1.0.0": - "integrity" "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=" - "resolved" "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz" - "version" "1.0.0" +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" -"is-negated-glob@^1.0.0": - "integrity" "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=" - "resolved" "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz" - "version" "1.0.0" +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= -"is-number@^3.0.0": - "integrity" "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=" - "resolved" "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" - "version" "3.0.0" +is-negated-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz" + integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: - "kind-of" "^3.0.2" + kind-of "^3.0.2" + +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz" + integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== -"is-number@^4.0.0": - "integrity" "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" - "resolved" "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz" - "version" "4.0.0" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -"is-number@^7.0.0": - "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - "version" "7.0.0" +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -"is-plain-object@^2.0.1", "is-plain-object@^2.0.3", "is-plain-object@^2.0.4": - "integrity" "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==" - "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" - "version" "2.0.4" +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: - "isobject" "^3.0.1" + isobject "^3.0.1" -"is-reference@^1.2.1": - "integrity" "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==" - "resolved" "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz" - "version" "1.2.1" +is-reference@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== dependencies: "@types/estree" "*" -"is-relative@^1.0.0": - "integrity" "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==" - "resolved" "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "is-unc-path" "^1.0.0" - -"is-unc-path@^1.0.0": - "integrity" "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==" - "resolved" "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "unc-path-regex" "^0.1.2" +is-relative@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz" + integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== + dependencies: + is-unc-path "^1.0.0" + +is-unc-path@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz" + integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== + dependencies: + unc-path-regex "^0.1.2" + +is-utf8@^0.2.0, is-utf8@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-valid-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz" + integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= + +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -"is-utf8@^0.2.0", "is-utf8@^0.2.1": - "integrity" "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - "resolved" "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" - "version" "0.2.1" - -"is-valid-glob@^1.0.0": - "integrity" "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=" - "resolved" "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz" - "version" "1.0.0" - -"is-windows@^1.0.1", "is-windows@^1.0.2": - "integrity" "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - "resolved" "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" - "version" "1.0.2" - -"isarray@~1.0.0", "isarray@1.0.0": - "integrity" "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - "version" "1.0.0" - -"isexe@^2.0.0": - "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - "version" "2.0.0" - -"isobject@^2.0.0": - "integrity" "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=" - "resolved" "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "isarray" "1.0.0" - -"isobject@^3.0.0", "isobject@^3.0.1": - "integrity" "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - "resolved" "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" - "version" "3.0.1" - -"istextorbinary@^3.0.0": - "integrity" "sha512-Tvq1W6NAcZeJ8op+Hq7tdZ434rqnMx4CCZ7H0ff83uEloDvVbqAwaMTZcafKGJT0VHkYzuXUiCY4hlXQg6WfoQ==" - "resolved" "https://registry.npmjs.org/istextorbinary/-/istextorbinary-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "binaryextensions" "^2.2.0" - "textextensions" "^3.2.0" - -"js-tokens@^4.0.0": - "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - "version" "4.0.0" - -"js-yaml@^3.13.1": - "integrity" "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz" - "version" "3.14.0" - dependencies: - "argparse" "^1.0.7" - "esprima" "^4.0.0" - -"js-yaml@^4.1.0": - "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "argparse" "^2.0.1" - -"json-schema-traverse@^0.4.1": - "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - "version" "0.4.1" - -"json-schema-traverse@^1.0.0": - "integrity" "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" - "version" "1.0.0" - -"json-stable-stringify-without-jsonify@^1.0.1": - "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" - "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - "version" "1.0.1" - -"just-debounce@^1.0.0": - "integrity" "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=" - "resolved" "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz" - "version" "1.0.0" - -"kind-of@^3.0.2", "kind-of@^3.0.3", "kind-of@^3.2.0": - "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" - "version" "3.2.2" - dependencies: - "is-buffer" "^1.1.5" - -"kind-of@^4.0.0": - "integrity" "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "is-buffer" "^1.1.5" - -"kind-of@^5.0.0": - "integrity" "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" - "version" "5.1.0" - -"kind-of@^5.0.2": - "integrity" "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" - "version" "5.1.0" - -"kind-of@^6.0.0": - "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - "version" "6.0.3" - -"kind-of@^6.0.2": - "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - "version" "6.0.3" - -"last-run@^1.1.0": - "integrity" "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=" - "resolved" "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "default-resolution" "^2.0.0" - "es6-weak-map" "^2.0.1" - -"lazystream@^1.0.0": - "integrity" "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=" - "resolved" "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "readable-stream" "^2.0.5" - -"lcid@^1.0.0": - "integrity" "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=" - "resolved" "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "invert-kv" "^1.0.0" - -"lead@^1.0.0": - "integrity" "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=" - "resolved" "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "flush-write-stream" "^1.0.2" - -"levn@^0.4.1": - "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" - "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - "version" "0.4.1" - dependencies: - "prelude-ls" "^1.2.1" - "type-check" "~0.4.0" - -"liftoff@^3.1.0": - "integrity" "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==" - "resolved" "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "extend" "^3.0.0" - "findup-sync" "^3.0.0" - "fined" "^1.0.1" - "flagged-respawn" "^1.0.0" - "is-plain-object" "^2.0.4" - "object.map" "^1.0.0" - "rechoir" "^0.6.2" - "resolve" "^1.1.7" - -"load-json-file@^1.0.0": - "integrity" "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=" - "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "graceful-fs" "^4.1.2" - "parse-json" "^2.2.0" - "pify" "^2.0.0" - "pinkie-promise" "^2.0.0" - "strip-bom" "^2.0.0" - -"lodash.merge@^4.6.2": - "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - "version" "4.6.2" - -"lodash@^4.17.20": - "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - "version" "4.17.21" - -"lru-cache@^6.0.0": - "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "yallist" "^4.0.0" - -"magic-string@^0.25.7": - "integrity" "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==" - "resolved" "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz" - "version" "0.25.7" - dependencies: - "sourcemap-codec" "^1.4.4" - -"make-iterator@^1.0.0": - "integrity" "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==" - "resolved" "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "kind-of" "^6.0.2" - -"map-cache@^0.2.0", "map-cache@^0.2.2": - "integrity" "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - "resolved" "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" - "version" "0.2.2" - -"map-visit@^1.0.0": - "integrity" "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=" - "resolved" "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "object-visit" "^1.0.0" - -"matchdep@^2.0.0": - "integrity" "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=" - "resolved" "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "findup-sync" "^2.0.0" - "micromatch" "^3.0.4" - "resolve" "^1.4.0" - "stack-trace" "0.0.10" - -"merge2@^1.3.0": - "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - "version" "1.4.1" - -"micromatch@^3.0.4", "micromatch@^3.1.10", "micromatch@^3.1.4": - "integrity" "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==" - "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" - "version" "3.1.10" - dependencies: - "arr-diff" "^4.0.0" - "array-unique" "^0.3.2" - "braces" "^2.3.1" - "define-property" "^2.0.2" - "extend-shallow" "^3.0.2" - "extglob" "^2.0.4" - "fragment-cache" "^0.2.1" - "kind-of" "^6.0.2" - "nanomatch" "^1.2.9" - "object.pick" "^1.3.0" - "regex-not" "^1.0.0" - "snapdragon" "^0.8.1" - "to-regex" "^3.0.2" - -"micromatch@^4.0.4": - "integrity" "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==" - "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" - "version" "4.0.4" - dependencies: - "braces" "^3.0.1" - "picomatch" "^2.2.3" - -"min-indent@^1.0.0": - "integrity" "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" - "resolved" "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" - "version" "1.0.1" - -"minimatch@^3.0.4": - "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "brace-expansion" "^1.1.7" - -"mixin-deep@^1.2.0": - "integrity" "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==" - "resolved" "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "for-in" "^1.0.2" - "is-extendable" "^1.0.1" - -"ms@2.0.0": - "integrity" "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - "version" "2.0.0" - -"ms@2.1.2": - "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - "version" "2.1.2" - -"mute-stdout@^1.0.0": - "integrity" "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==" - "resolved" "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz" - "version" "1.0.1" - -"nanomatch@^1.2.9": - "integrity" "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==" - "resolved" "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" - "version" "1.2.13" - dependencies: - "arr-diff" "^4.0.0" - "array-unique" "^0.3.2" - "define-property" "^2.0.2" - "extend-shallow" "^3.0.2" - "fragment-cache" "^0.2.1" - "is-windows" "^1.0.2" - "kind-of" "^6.0.2" - "object.pick" "^1.3.0" - "regex-not" "^1.0.0" - "snapdragon" "^0.8.1" - "to-regex" "^3.0.1" - -"natural-compare@^1.4.0": - "integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" - "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - "version" "1.4.0" - -"next-tick@~1.0.0": - "integrity" "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - "resolved" "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz" - "version" "1.0.0" - -"normalize-package-data@^2.3.2": - "integrity" "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==" - "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - "version" "2.5.0" - dependencies: - "hosted-git-info" "^2.1.4" - "resolve" "^1.10.0" - "semver" "2 || 3 || 4 || 5" - "validate-npm-package-license" "^3.0.1" - -"normalize-path@^2.1.1": - "integrity" "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=" - "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "remove-trailing-separator" "^1.0.1" - -"normalize-path@^3.0.0": - "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - "version" "3.0.0" - -"now-and-later@^2.0.0": - "integrity" "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==" - "resolved" "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "once" "^1.3.2" - -"number-is-nan@^1.0.0": - "integrity" "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - "resolved" "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" - "version" "1.0.1" - -"object-assign@^4.0.1": - "integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - "version" "4.1.1" - -"object-copy@^0.1.0": - "integrity" "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=" - "resolved" "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" - "version" "0.1.0" - dependencies: - "copy-descriptor" "^0.1.0" - "define-property" "^0.2.5" - "kind-of" "^3.0.3" - -"object-keys@^1.0.11", "object-keys@^1.0.12": - "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" - "version" "1.1.1" - -"object-visit@^1.0.0": - "integrity" "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=" - "resolved" "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "isobject" "^3.0.0" - -"object.assign@^4.0.4", "object.assign@^4.1.0": - "integrity" "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==" - "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "define-properties" "^1.1.2" - "function-bind" "^1.1.1" - "has-symbols" "^1.0.0" - "object-keys" "^1.0.11" - -"object.defaults@^1.0.0", "object.defaults@^1.1.0": - "integrity" "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=" - "resolved" "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "array-each" "^1.0.1" - "array-slice" "^1.0.0" - "for-own" "^1.0.0" - "isobject" "^3.0.0" - -"object.map@^1.0.0": - "integrity" "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=" - "resolved" "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "for-own" "^1.0.0" - "make-iterator" "^1.0.0" - -"object.pick@^1.2.0", "object.pick@^1.3.0": - "integrity" "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=" - "resolved" "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "isobject" "^3.0.1" - -"object.reduce@^1.0.0": - "integrity" "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=" - "resolved" "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "for-own" "^1.0.0" - "make-iterator" "^1.0.0" - -"once@^1.3.0", "once@^1.3.1", "once@^1.3.2", "once@^1.4.0": - "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" - "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "wrappy" "1" - -"optionator@^0.9.1": - "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" - "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - "version" "0.9.1" - dependencies: - "deep-is" "^0.1.3" - "fast-levenshtein" "^2.0.6" - "levn" "^0.4.1" - "prelude-ls" "^1.2.1" - "type-check" "^0.4.0" - "word-wrap" "^1.2.3" - -"ordered-read-streams@^1.0.0": - "integrity" "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=" - "resolved" "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "readable-stream" "^2.0.1" - -"os-locale@^1.4.0": - "integrity" "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=" - "resolved" "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "lcid" "^1.0.0" - -"parent-module@^1.0.0": - "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" - "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "callsites" "^3.0.0" - -"parse-filepath@^1.0.1": - "integrity" "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=" - "resolved" "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "is-absolute" "^1.0.0" - "map-cache" "^0.2.0" - "path-root" "^0.1.1" - -"parse-json@^2.2.0": - "integrity" "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=" - "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" - "version" "2.2.0" - dependencies: - "error-ex" "^1.2.0" - -"parse-node-version@^1.0.0": - "integrity" "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==" - "resolved" "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz" - "version" "1.0.1" - -"parse-passwd@^1.0.0": - "integrity" "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" - "resolved" "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" - "version" "1.0.0" - -"pascalcase@^0.1.1": - "integrity" "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - "resolved" "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" - "version" "0.1.1" - -"path-dirname@^1.0.0": - "integrity" "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - "resolved" "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz" - "version" "1.0.2" - -"path-exists@^2.0.0": - "integrity" "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=" - "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "pinkie-promise" "^2.0.0" - -"path-is-absolute@^1.0.0": - "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - "version" "1.0.1" - -"path-key@^3.1.0": - "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - "version" "3.1.1" - -"path-parse@^1.0.6": - "integrity" "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz" - "version" "1.0.6" - -"path-root-regex@^0.1.0": - "integrity" "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=" - "resolved" "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz" - "version" "0.1.2" - -"path-root@^0.1.1": - "integrity" "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=" - "resolved" "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz" - "version" "0.1.1" - dependencies: - "path-root-regex" "^0.1.0" - -"path-type@^1.0.0": - "integrity" "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=" - "resolved" "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "graceful-fs" "^4.1.2" - "pify" "^2.0.0" - "pinkie-promise" "^2.0.0" - -"path-type@^4.0.0": - "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - "version" "4.0.0" - -"picomatch@^2.2.2", "picomatch@^2.2.3": - "integrity" "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" - "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" - "version" "2.3.0" - -"pify@^2.0.0": - "integrity" "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - "resolved" "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - "version" "2.3.0" - -"pinkie-promise@^2.0.0": - "integrity" "sha1-ITXW36ejWMBprJsXh3YogihFD/o=" - "resolved" "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "pinkie" "^2.0.0" - -"pinkie@^2.0.0": - "integrity" "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - "resolved" "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" - "version" "2.0.4" - -"posix-character-classes@^0.1.0": - "integrity" "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - "resolved" "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" - "version" "0.1.1" - -"prelude-ls@^1.2.1": - "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - "version" "1.2.1" - -"pretty-hrtime@^1.0.0": - "integrity" "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" - "resolved" "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz" - "version" "1.0.3" - -"process-nextick-args@^2.0.0", "process-nextick-args@~2.0.0": - "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - "version" "2.0.1" - -"progress@^2.0.0": - "integrity" "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - "resolved" "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" - "version" "2.0.3" - -"pump@^2.0.0": - "integrity" "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==" - "resolved" "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "end-of-stream" "^1.1.0" - "once" "^1.3.1" - -"pumpify@^1.3.5": - "integrity" "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==" - "resolved" "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz" - "version" "1.5.1" - dependencies: - "duplexify" "^3.6.0" - "inherits" "^2.0.3" - "pump" "^2.0.0" - -"punycode@^2.1.0": - "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - "version" "2.1.1" - -"queue-microtask@^1.2.2": - "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - "version" "1.2.3" - -"read-pkg-up@^1.0.1": - "integrity" "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=" - "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "find-up" "^1.0.0" - "read-pkg" "^1.0.0" - -"read-pkg@^1.0.0": - "integrity" "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=" - "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "load-json-file" "^1.0.0" - "normalize-package-data" "^2.3.2" - "path-type" "^1.0.0" - -"readable-stream@^2.0.0", "readable-stream@^2.0.1", "readable-stream@^2.0.2", "readable-stream@^2.0.5", "readable-stream@^2.1.5", "readable-stream@^2.2.2", "readable-stream@^2.3.3", "readable-stream@^2.3.5", "readable-stream@^2.3.6", "readable-stream@~2.3.6": - "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - "version" "2.3.7" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.3" - "isarray" "~1.0.0" - "process-nextick-args" "~2.0.0" - "safe-buffer" "~5.1.1" - "string_decoder" "~1.1.1" - "util-deprecate" "~1.0.1" - -"readdirp@^2.2.1": - "integrity" "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==" - "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz" - "version" "2.2.1" - dependencies: - "graceful-fs" "^4.1.11" - "micromatch" "^3.1.10" - "readable-stream" "^2.0.2" - -"rechoir@^0.6.2": - "integrity" "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=" - "resolved" "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" - "version" "0.6.2" - dependencies: - "resolve" "^1.1.6" - -"regex-not@^1.0.0", "regex-not@^1.0.2": - "integrity" "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==" - "resolved" "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "extend-shallow" "^3.0.2" - "safe-regex" "^1.1.0" - -"regexpp@^3.1.0", "regexpp@^3.2.0": - "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" - "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - "version" "3.2.0" - -"remove-bom-buffer@^3.0.0": - "integrity" "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==" - "resolved" "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "is-buffer" "^1.1.5" - "is-utf8" "^0.2.1" - -"remove-bom-stream@^1.2.0": - "integrity" "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=" - "resolved" "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "remove-bom-buffer" "^3.0.0" - "safe-buffer" "^5.1.0" - "through2" "^2.0.3" - -"remove-trailing-separator@^1.0.1", "remove-trailing-separator@^1.1.0": - "integrity" "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - "resolved" "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz" - "version" "1.1.0" - -"repeat-element@^1.1.2": - "integrity" "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" - "resolved" "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz" - "version" "1.1.3" - -"repeat-string@^1.6.1": - "integrity" "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - "resolved" "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" - "version" "1.6.1" - -"replace-ext@^1.0.0": - "integrity" "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==" - "resolved" "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz" - "version" "1.0.1" - -"replace-homedir@^1.0.0": - "integrity" "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=" - "resolved" "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "homedir-polyfill" "^1.0.1" - "is-absolute" "^1.0.0" - "remove-trailing-separator" "^1.1.0" - -"replacestream@^4.0.3": - "integrity" "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==" - "resolved" "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "escape-string-regexp" "^1.0.3" - "object-assign" "^4.0.1" - "readable-stream" "^2.0.2" - -"require-directory@^2.1.1": - "integrity" "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - "version" "2.1.1" - -"require-from-string@^2.0.2": - "integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" - "version" "2.0.2" - -"require-main-filename@^1.0.1": - "integrity" "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz" - "version" "1.0.1" - -"require-relative@^0.8.7": - "integrity" "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=" - "resolved" "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz" - "version" "0.8.7" - -"resolve-dir@^1.0.0", "resolve-dir@^1.0.1": - "integrity" "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=" - "resolved" "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "expand-tilde" "^2.0.0" - "global-modules" "^1.0.0" - -"resolve-from@^4.0.0": - "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - "version" "4.0.0" - -"resolve-options@^1.1.0": - "integrity" "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=" - "resolved" "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "value-or-function" "^3.0.0" - -"resolve-url@^0.2.1": - "integrity" "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - "resolved" "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" - "version" "0.2.1" - -"resolve@^1.1.6", "resolve@^1.1.7", "resolve@^1.10.0", "resolve@^1.4.0": - "integrity" "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==" - "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz" - "version" "1.17.0" - dependencies: - "path-parse" "^1.0.6" - -"resolve@^1.17.0": - "integrity" "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==" - "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" - "version" "1.20.0" - dependencies: - "is-core-module" "^2.2.0" - "path-parse" "^1.0.6" - -"resolve@^1.19.0": - "integrity" "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==" - "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" - "version" "1.20.0" - dependencies: - "is-core-module" "^2.2.0" - "path-parse" "^1.0.6" - -"ret@~0.1.10": - "integrity" "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - "resolved" "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" - "version" "0.1.15" - -"reusify@^1.0.4": - "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - "version" "1.0.4" - -"rimraf@^3.0.2": - "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "glob" "^7.1.3" - -"rollup-plugin-svelte@^7.1.0": - "integrity" "sha512-vopCUq3G+25sKjwF5VilIbiY6KCuMNHP1PFvx2Vr3REBNMDllKHFZN2B9jwwC+MqNc3UPKkjXnceLPEjTjXGXg==" - "resolved" "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-7.1.0.tgz" - "version" "7.1.0" - dependencies: - "require-relative" "^0.8.7" - "rollup-pluginutils" "^2.8.2" - -"rollup-pluginutils@^2.8.2": - "integrity" "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==" - "resolved" "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz" - "version" "2.8.2" - dependencies: - "estree-walker" "^0.6.1" - -"rollup@^1.20.0||^2.0.0", "rollup@^2.14.0", "rollup@^2.38.3", "rollup@^2.42.0", "rollup@>=2.0.0", "rollup@2.59.0", "rollup@2.x": - "integrity" "sha512-l7s90JQhCQ6JyZjKgo7Lq1dKh2RxatOM+Jr6a9F7WbS9WgKbocyUSeLmZl8evAse7y96Ae98L2k1cBOwWD8nHw==" - "resolved" "https://registry.npmjs.org/rollup/-/rollup-2.59.0.tgz" - "version" "2.59.0" +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +istextorbinary@^3.0.0: + version "3.3.0" + resolved "https://registry.npmjs.org/istextorbinary/-/istextorbinary-3.3.0.tgz" + integrity sha512-Tvq1W6NAcZeJ8op+Hq7tdZ434rqnMx4CCZ7H0ff83uEloDvVbqAwaMTZcafKGJT0VHkYzuXUiCY4hlXQg6WfoQ== + dependencies: + binaryextensions "^2.2.0" + textextensions "^3.2.0" + +js-sdsl@^4.1.4: + version "4.3.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711" + integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +just-debounce@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz" + integrity sha1-h/zPrv/AtozRnVX2cilD+SnqNeo= + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0, kind-of@^5.0.2: + version "5.1.0" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +last-run@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz" + integrity sha1-RblpQsF7HHnHchmCWbqUO+v4yls= + dependencies: + default-resolution "^2.0.0" + es6-weak-map "^2.0.1" + +lazystream@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz" + integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= + dependencies: + readable-stream "^2.0.5" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + +lead@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz" + integrity sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI= + dependencies: + flush-write-stream "^1.0.2" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +liftoff@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz" + integrity sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog== + dependencies: + extend "^3.0.0" + findup-sync "^3.0.0" + fined "^1.0.1" + flagged-respawn "^1.0.0" + is-plain-object "^2.0.4" + object.map "^1.0.0" + rechoir "^0.6.2" + resolve "^1.1.7" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string@^0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" + integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.13" + +make-iterator@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz" + integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw== + dependencies: + kind-of "^6.0.2" + +map-cache@^0.2.0, map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +matchdep@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz" + integrity sha1-xvNINKDY28OzfCfui7yyfHd1WC4= + dependencies: + findup-sync "^2.0.0" + micromatch "^3.0.4" + resolve "^1.4.0" + stack-trace "0.0.10" + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.0.5, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mute-stdout@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz" + integrity sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg== + +nan@^2.12.1: + version "2.17.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" + integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +now-and-later@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz" + integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== + dependencies: + once "^1.3.2" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-keys@^1.0.11, object-keys@^1.0.12: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.0.4, object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.defaults@^1.0.0, object.defaults@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz" + integrity sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8= + dependencies: + array-each "^1.0.1" + array-slice "^1.0.0" + for-own "^1.0.0" + isobject "^3.0.0" + +object.map@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz" + integrity sha1-z4Plncj8wK1fQlDh94s7gb2AHTc= + dependencies: + for-own "^1.0.0" + make-iterator "^1.0.0" + +object.pick@^1.2.0, object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.reduce@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz" + integrity sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60= + dependencies: + for-own "^1.0.0" + make-iterator "^1.0.0" + +once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +ordered-read-streams@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz" + integrity sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= + dependencies: + readable-stream "^2.0.1" + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz" + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= + dependencies: + lcid "^1.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-filepath@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz" + integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= + dependencies: + is-absolute "^1.0.0" + map-cache "^0.2.0" + path-root "^0.1.1" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-node-version@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz" + integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-root-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz" + integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= + +path-root@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz" + integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= + dependencies: + path-root-regex "^0.1.0" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picomatch@^2.2.2, picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +pretty-hrtime@^1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz" + integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= + +process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.5: + version "1.5.1" + resolved "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +remove-bom-buffer@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz" + integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== + dependencies: + is-buffer "^1.1.5" + is-utf8 "^0.2.1" + +remove-bom-stream@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz" + integrity sha1-BfGlk/FuQuH7kOv1nejlaVJflSM= + dependencies: + remove-bom-buffer "^3.0.0" + safe-buffer "^5.1.0" + through2 "^2.0.3" + +remove-trailing-separator@^1.0.1, remove-trailing-separator@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +replace-ext@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz" + integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== + +replace-homedir@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz" + integrity sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw= + dependencies: + homedir-polyfill "^1.0.1" + is-absolute "^1.0.0" + remove-trailing-separator "^1.1.0" + +replacestream@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz" + integrity sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA== + dependencies: + escape-string-regexp "^1.0.3" + object-assign "^4.0.1" + readable-stream "^2.0.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-options@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz" + integrity sha1-MrueOcBtZzONyTeMDW1gdFZq0TE= + dependencies: + value-or-function "^3.0.0" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.4.0: + version "1.17.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.22.1: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^2.5.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup-plugin-svelte@7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-svelte/-/rollup-plugin-svelte-7.1.2.tgz#266beab511b00ab1dff7706926c84051a155c8eb" + integrity sha512-CfU5C4lhVyN80GqtNod4IvsN1nYrcWS3C/T9+gWF+O31e4QwBPo6ubHlLnuQKYVBzC3qIGdERuyrbrvljLfN/A== + dependencies: + "@rollup/pluginutils" "^4.1.0" + +rollup@3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.15.0.tgz#6f4105e8c4b8145229657b74ad660b02fbfacc05" + integrity sha512-F9hrCAhnp5/zx/7HYmftvsNBkMfLfk/dXUh73hPSM2E3CRgap65orDNJbLetoiUFwSAk6iHPLvBrZ5iHYvzqsg== optionalDependencies: - "fsevents" "~2.3.2" + fsevents "~2.3.2" -"run-parallel@^1.1.9": - "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" - "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - "version" "1.2.0" +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: - "queue-microtask" "^1.2.2" + queue-microtask "^1.2.2" -"safe-buffer@^5.1.0": - "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - "version" "5.2.1" +safe-buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safe-buffer@~5.1.0", "safe-buffer@~5.1.1": - "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - "version" "5.1.2" +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -"safe-regex@^1.1.0": - "integrity" "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=" - "resolved" "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" - "version" "1.1.0" +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= dependencies: - "ret" "~0.1.10" + ret "~0.1.10" -"semver-greatest-satisfied-range@^1.1.0": - "integrity" "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=" - "resolved" "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz" - "version" "1.1.0" +sander@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/sander/-/sander-0.5.1.tgz#741e245e231f07cafb6fdf0f133adfa216a502ad" + integrity sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA== dependencies: - "sver-compat" "^1.5.0" + es6-promise "^3.1.2" + graceful-fs "^4.1.3" + mkdirp "^0.5.1" + rimraf "^2.5.2" -"semver@^7.2.1", "semver@^7.3.5": - "integrity" "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" - "version" "7.3.5" +semver-greatest-satisfied-range@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz" + integrity sha1-E+jCZYq5aRywzXEJMkAoDTb3els= dependencies: - "lru-cache" "^6.0.0" + sver-compat "^1.5.0" "semver@2 || 3 || 4 || 5": - "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - "version" "5.7.1" - -"set-blocking@^2.0.0": - "integrity" "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - "version" "2.0.0" - -"set-value@^2.0.0", "set-value@^2.0.1": - "integrity" "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==" - "resolved" "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "extend-shallow" "^2.0.1" - "is-extendable" "^0.1.1" - "is-plain-object" "^2.0.3" - "split-string" "^3.0.1" - -"shebang-command@^2.0.0": - "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" - "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "shebang-regex" "^3.0.0" - -"shebang-regex@^3.0.0": - "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - "version" "3.0.0" - -"slash@^3.0.0": - "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - "version" "3.0.0" - -"slice-ansi@^4.0.0": - "integrity" "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==" - "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "ansi-styles" "^4.0.0" - "astral-regex" "^2.0.0" - "is-fullwidth-code-point" "^3.0.0" - -"snapdragon-node@^2.0.1": - "integrity" "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==" - "resolved" "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "define-property" "^1.0.0" - "isobject" "^3.0.0" - "snapdragon-util" "^3.0.1" - -"snapdragon-util@^3.0.1": - "integrity" "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==" - "resolved" "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "kind-of" "^3.2.0" - -"snapdragon@^0.8.1": - "integrity" "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==" - "resolved" "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" - "version" "0.8.2" - dependencies: - "base" "^0.11.1" - "debug" "^2.2.0" - "define-property" "^0.2.5" - "extend-shallow" "^2.0.1" - "map-cache" "^0.2.2" - "source-map" "^0.5.6" - "source-map-resolve" "^0.5.0" - "use" "^3.1.0" - -"source-map-resolve@^0.5.0": - "integrity" "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==" - "resolved" "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" - "version" "0.5.3" - dependencies: - "atob" "^2.1.2" - "decode-uri-component" "^0.2.0" - "resolve-url" "^0.2.1" - "source-map-url" "^0.4.0" - "urix" "^0.1.0" - -"source-map-url@^0.4.0": - "integrity" "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - "resolved" "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz" - "version" "0.4.0" - -"source-map@^0.5.6": - "integrity" "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" - "version" "0.5.7" - -"source-map@^0.6.1": - "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - "version" "0.6.1" - -"sourcemap-codec@^1.4.4": - "integrity" "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" - "resolved" "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" - "version" "1.4.8" - -"sparkles@^1.0.0": - "integrity" "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==" - "resolved" "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz" - "version" "1.0.1" - -"spdx-correct@^3.0.0": - "integrity" "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==" - "resolved" "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" - "version" "3.1.1" - dependencies: - "spdx-expression-parse" "^3.0.0" - "spdx-license-ids" "^3.0.0" - -"spdx-exceptions@^2.1.0": - "integrity" "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - "resolved" "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" - "version" "2.3.0" - -"spdx-expression-parse@^3.0.0": - "integrity" "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==" - "resolved" "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "spdx-exceptions" "^2.1.0" - "spdx-license-ids" "^3.0.0" - -"spdx-license-ids@^3.0.0": - "integrity" "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" - "resolved" "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz" - "version" "3.0.5" - -"split-string@^3.0.1", "split-string@^3.0.2": - "integrity" "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==" - "resolved" "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "extend-shallow" "^3.0.0" - -"sprintf-js@~1.0.2": - "integrity" "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - "version" "1.0.3" - -"stack-trace@0.0.10": - "integrity" "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - "resolved" "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz" - "version" "0.0.10" - -"static-extend@^0.1.1": - "integrity" "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=" - "resolved" "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" - "version" "0.1.2" - dependencies: - "define-property" "^0.2.5" - "object-copy" "^0.1.0" - -"stream-exhaust@^1.0.1": - "integrity" "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==" - "resolved" "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz" - "version" "1.0.2" - -"stream-shift@^1.0.0": - "integrity" "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - "resolved" "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" - "version" "1.0.1" - -"string_decoder@~1.1.1": - "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "safe-buffer" "~5.1.0" - -"string-width@^1.0.1", "string-width@^1.0.2": - "integrity" "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "code-point-at" "^1.0.0" - "is-fullwidth-code-point" "^1.0.0" - "strip-ansi" "^3.0.0" - -"string-width@^4.2.0": - "integrity" "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz" - "version" "4.2.0" - dependencies: - "emoji-regex" "^8.0.0" - "is-fullwidth-code-point" "^3.0.0" - "strip-ansi" "^6.0.0" - -"strip-ansi@^3.0.0": - "integrity" "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "ansi-regex" "^2.0.0" - -"strip-ansi@^3.0.1": - "integrity" "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "ansi-regex" "^2.0.0" - -"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": - "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "ansi-regex" "^5.0.1" - -"strip-bom@^2.0.0": - "integrity" "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=" - "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "is-utf8" "^0.2.0" - -"strip-indent@^3.0.0": - "integrity" "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==" - "resolved" "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "min-indent" "^1.0.0" - -"strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1": - "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - "version" "3.1.1" - -"supports-color@^5.3.0": - "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - "version" "5.5.0" - dependencies: - "has-flag" "^3.0.0" - -"supports-color@^7.1.0": - "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - "version" "7.2.0" - dependencies: - "has-flag" "^4.0.0" - -"svelte-preprocess@^4.7.4": - "integrity" "sha512-mDAmaltQl6e5zU2VEtoWEf7eLTfuOTGr9zt+BpA3AGHo8MIhKiNSPE9OLTCTOMgj0vj/uL9QBbaNmpG4G1CgIA==" - "resolved" "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.7.4.tgz" - "version" "4.7.4" - dependencies: - "@types/pug" "^2.0.4" - "@types/sass" "^1.16.0" - "detect-indent" "^6.0.0" - "strip-indent" "^3.0.0" - -"svelte@^3.23.0", "svelte@^3.41.0", "svelte@>=3.5.0": - "integrity" "sha512-X9/lnTcRBCrMdyFBVjfmqy1T2vyN8ejUE1OfbWSccc2Z42Amn3ab3XdBgVl+oDkZvzPfPMoxo6CEbWca7pXOew==" - "resolved" "https://registry.npmjs.org/svelte/-/svelte-3.41.0.tgz" - "version" "3.41.0" - -"sver-compat@^1.5.0": - "integrity" "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=" - "resolved" "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz" - "version" "1.5.0" - dependencies: - "es6-iterator" "^2.0.1" - "es6-symbol" "^3.1.1" - -"table@^6.0.4": - "integrity" "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==" - "resolved" "https://registry.npmjs.org/table/-/table-6.0.7.tgz" - "version" "6.0.7" - dependencies: - "ajv" "^7.0.2" - "lodash" "^4.17.20" - "slice-ansi" "^4.0.0" - "string-width" "^4.2.0" - -"text-table@^0.2.0": - "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - "version" "0.2.0" - -"textextensions@^3.2.0": - "integrity" "sha512-mk82dS8eRABNbeVJrEiN5/UMSCliINAuz8mkUwH4SwslkNP//gbEzlWNS5au0z5Dpx40SQxzqZevZkn+WYJ9Dw==" - "resolved" "https://registry.npmjs.org/textextensions/-/textextensions-3.3.0.tgz" - "version" "3.3.0" - -"through2-filter@^3.0.0": - "integrity" "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==" - "resolved" "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "through2" "~2.0.0" - "xtend" "~4.0.0" - -"through2@^2.0.0", "through2@^2.0.3", "through2@~2.0.0": - "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" - "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" - "version" "2.0.5" - dependencies: - "readable-stream" "~2.3.6" - "xtend" "~4.0.1" - -"time-stamp@^1.0.0": - "integrity" "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" - "resolved" "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz" - "version" "1.1.0" - -"to-absolute-glob@^2.0.0": - "integrity" "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=" - "resolved" "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "is-absolute" "^1.0.0" - "is-negated-glob" "^1.0.0" - -"to-object-path@^0.3.0": - "integrity" "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=" - "resolved" "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" - "version" "0.3.0" - dependencies: - "kind-of" "^3.0.2" - -"to-regex-range@^2.1.0": - "integrity" "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=" - "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "is-number" "^3.0.0" - "repeat-string" "^1.6.1" - -"to-regex-range@^5.0.1": - "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" - "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "is-number" "^7.0.0" - -"to-regex@^3.0.1", "to-regex@^3.0.2": - "integrity" "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==" - "resolved" "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "define-property" "^2.0.2" - "extend-shallow" "^3.0.2" - "regex-not" "^1.0.2" - "safe-regex" "^1.1.0" - -"to-through@^2.0.0": - "integrity" "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=" - "resolved" "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "through2" "^2.0.3" - -"tslib@*", "tslib@2.3.1": - "integrity" "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" - "version" "2.3.1" - -"tslib@^1.8.1": - "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - "version" "1.14.1" - -"tsutils@^3.21.0": - "integrity" "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==" - "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" - "version" "3.21.0" - dependencies: - "tslib" "^1.8.1" - -"type-check@^0.4.0", "type-check@~0.4.0": - "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" - "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - "version" "0.4.0" - dependencies: - "prelude-ls" "^1.2.1" - -"type-fest@^0.20.2": - "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - "version" "0.20.2" - -"type-fest@^0.8.1": - "integrity" "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" - "version" "0.8.1" - -"type@^1.0.1": - "integrity" "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - "resolved" "https://registry.npmjs.org/type/-/type-1.2.0.tgz" - "version" "1.2.0" - -"type@^2.0.0": - "integrity" "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==" - "resolved" "https://registry.npmjs.org/type/-/type-2.0.0.tgz" - "version" "2.0.0" - -"typedarray@^0.0.6": - "integrity" "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - "resolved" "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" - "version" "0.0.6" - -"typescript@^3.9.5 || ^4.0.0", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.7.0", "typescript@4.4.4": - "integrity" "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==" - "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz" - "version" "4.4.4" - -"unc-path-regex@^0.1.2": - "integrity" "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" - "resolved" "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz" - "version" "0.1.2" - -"undertaker-registry@^1.0.0": - "integrity" "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=" - "resolved" "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz" - "version" "1.0.1" - -"undertaker@^1.2.1": - "integrity" "sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA==" - "resolved" "https://registry.npmjs.org/undertaker/-/undertaker-1.2.1.tgz" - "version" "1.2.1" - dependencies: - "arr-flatten" "^1.0.1" - "arr-map" "^2.0.0" - "bach" "^1.0.0" - "collection-map" "^1.0.0" - "es6-weak-map" "^2.0.1" - "last-run" "^1.1.0" - "object.defaults" "^1.0.0" - "object.reduce" "^1.0.0" - "undertaker-registry" "^1.0.0" - -"union-value@^1.0.0": - "integrity" "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==" - "resolved" "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "arr-union" "^3.1.0" - "get-value" "^2.0.6" - "is-extendable" "^0.1.1" - "set-value" "^2.0.1" - -"unique-stream@^2.0.2": - "integrity" "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==" - "resolved" "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz" - "version" "2.3.1" - dependencies: - "json-stable-stringify-without-jsonify" "^1.0.1" - "through2-filter" "^3.0.0" - -"unset-value@^1.0.0": - "integrity" "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=" - "resolved" "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "has-value" "^0.3.1" - "isobject" "^3.0.0" - -"upath@^1.1.1": - "integrity" "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" - "resolved" "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz" - "version" "1.2.0" - -"uri-js@^4.2.2": - "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" - "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - "version" "4.4.1" - dependencies: - "punycode" "^2.1.0" - -"urix@^0.1.0": - "integrity" "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - "resolved" "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" - "version" "0.1.0" - -"use@^3.1.0": - "integrity" "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - "resolved" "https://registry.npmjs.org/use/-/use-3.1.1.tgz" - "version" "3.1.1" - -"util-deprecate@~1.0.1": - "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - "version" "1.0.2" - -"v8-compile-cache@^2.0.3": - "integrity" "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==" - "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz" - "version" "2.2.0" - -"v8flags@^3.2.0": - "integrity" "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==" - "resolved" "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz" - "version" "3.2.0" - dependencies: - "homedir-polyfill" "^1.0.1" - -"validate-npm-package-license@^3.0.1": - "integrity" "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==" - "resolved" "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "spdx-correct" "^3.0.0" - "spdx-expression-parse" "^3.0.0" - -"value-or-function@^3.0.0": - "integrity" "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=" - "resolved" "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz" - "version" "3.0.0" - -"vinyl-fs@^3.0.0": - "integrity" "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==" - "resolved" "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz" - "version" "3.0.3" - dependencies: - "fs-mkdirp-stream" "^1.0.0" - "glob-stream" "^6.1.0" - "graceful-fs" "^4.0.0" - "is-valid-glob" "^1.0.0" - "lazystream" "^1.0.0" - "lead" "^1.0.0" - "object.assign" "^4.0.4" - "pumpify" "^1.3.5" - "readable-stream" "^2.3.3" - "remove-bom-buffer" "^3.0.0" - "remove-bom-stream" "^1.2.0" - "resolve-options" "^1.1.0" - "through2" "^2.0.0" - "to-through" "^2.0.0" - "value-or-function" "^3.0.0" - "vinyl" "^2.0.0" - "vinyl-sourcemap" "^1.1.0" - -"vinyl-sourcemap@^1.1.0": - "integrity" "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=" - "resolved" "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "append-buffer" "^1.0.2" - "convert-source-map" "^1.5.0" - "graceful-fs" "^4.1.6" - "normalize-path" "^2.1.1" - "now-and-later" "^2.0.0" - "remove-bom-buffer" "^3.0.0" - "vinyl" "^2.0.0" - -"vinyl@^2.0.0": - "integrity" "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==" - "resolved" "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz" - "version" "2.2.0" - dependencies: - "clone" "^2.1.1" - "clone-buffer" "^1.0.0" - "clone-stats" "^1.0.0" - "cloneable-readable" "^1.0.0" - "remove-trailing-separator" "^1.0.1" - "replace-ext" "^1.0.0" - -"which-module@^1.0.0": - "integrity" "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" - "resolved" "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz" - "version" "1.0.0" - -"which@^1.2.14": - "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" - "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - "version" "1.3.1" - dependencies: - "isexe" "^2.0.0" - -"which@^2.0.1": - "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" - "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "isexe" "^2.0.0" - -"word-wrap@^1.2.3": - "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - "version" "1.2.3" - -"wrap-ansi@^2.0.0": - "integrity" "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "string-width" "^1.0.1" - "strip-ansi" "^3.0.1" - -"wrappy@1": - "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - "version" "1.0.2" - -"xtend@~4.0.0", "xtend@~4.0.1": - "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" - "version" "4.0.2" - -"y18n@^3.2.1": - "integrity" "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - "resolved" "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz" - "version" "3.2.1" - -"yallist@^4.0.0": - "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - "version" "4.0.0" - -"yargs-parser@>=5.0.0-security.0": - "integrity" "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz" - "version" "20.2.7" - -"yargs-parser@5.0.0-security.0": - "integrity" "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz" - "version" "5.0.0-security.0" - dependencies: - "camelcase" "^3.0.0" - "object.assign" "^4.1.0" - -"yargs@^7.1.0": - "integrity" "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz" - "version" "7.1.1" - dependencies: - "camelcase" "^3.0.0" - "cliui" "^3.2.0" - "decamelize" "^1.1.1" - "get-caller-file" "^1.0.1" - "os-locale" "^1.4.0" - "read-pkg-up" "^1.0.1" - "require-directory" "^2.1.1" - "require-main-filename" "^1.0.1" - "set-blocking" "^2.0.0" - "string-width" "^1.0.2" - "which-module" "^1.0.0" - "y18n" "^3.2.1" - "yargs-parser" "5.0.0-security.0" + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^7.3.7: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sorcery@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/sorcery/-/sorcery-0.11.0.tgz#310c80ee993433854bb55bb9aa4003acd147fca8" + integrity sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.14" + buffer-crc32 "^0.2.5" + minimist "^1.2.0" + sander "^0.5.0" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sparkles@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz" + integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +stack-trace@0.0.10: + version "0.0.10" + resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz" + integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +stream-exhaust@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz" + integrity sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw== + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svelte-preprocess@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-5.0.1.tgz#3dd21a17eb508347d4b26a0d98059d23e2d1b9a0" + integrity sha512-0HXyhCoc9rsW4zGOgtInylC6qj259E1hpFnJMJWTf+aIfeqh4O/QHT31KT2hvPEqQfdjmqBR/kO2JDkkciBLrQ== + dependencies: + "@types/pug" "^2.0.6" + "@types/sass" "^1.43.1" + detect-indent "^6.1.0" + magic-string "^0.27.0" + sorcery "^0.11.0" + strip-indent "^3.0.0" + +svelte@3.55.1: + version "3.55.1" + resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.55.1.tgz#6f93b153e5248039906ce5fe196efdb9e05dfce8" + integrity sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ== + +sver-compat@^1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz" + integrity sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg= + dependencies: + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +textextensions@^3.2.0: + version "3.3.0" + resolved "https://registry.npmjs.org/textextensions/-/textextensions-3.3.0.tgz" + integrity sha512-mk82dS8eRABNbeVJrEiN5/UMSCliINAuz8mkUwH4SwslkNP//gbEzlWNS5au0z5Dpx40SQxzqZevZkn+WYJ9Dw== + +through2-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz" + integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== + dependencies: + through2 "~2.0.0" + xtend "~4.0.0" + +through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: + version "2.0.5" + resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +time-stamp@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz" + integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= + +to-absolute-glob@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz" + integrity sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= + dependencies: + is-absolute "^1.0.0" + is-negated-glob "^1.0.0" + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +to-through@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz" + integrity sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY= + dependencies: + through2 "^2.0.3" + +tslib@2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.npmjs.org/type/-/type-1.2.0.tgz" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/type/-/type-2.0.0.tgz" + integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript@4.9.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +unc-path-regex@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz" + integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= + +undertaker-registry@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz" + integrity sha1-XkvaMI5KiirlhPm5pDWaSZglzFA= + +undertaker@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/undertaker/-/undertaker-1.2.1.tgz" + integrity sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA== + dependencies: + arr-flatten "^1.0.1" + arr-map "^2.0.0" + bach "^1.0.0" + collection-map "^1.0.0" + es6-weak-map "^2.0.1" + last-run "^1.1.0" + object.defaults "^1.0.0" + object.reduce "^1.0.0" + undertaker-registry "^1.0.0" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +unique-stream@^2.0.2: + version "2.3.1" + resolved "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz" + integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== + dependencies: + json-stable-stringify-without-jsonify "^1.0.1" + through2-filter "^3.0.0" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +v8flags@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz" + integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== + dependencies: + homedir-polyfill "^1.0.1" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +value-or-function@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz" + integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= + +vinyl-fs@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz" + integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== + dependencies: + fs-mkdirp-stream "^1.0.0" + glob-stream "^6.1.0" + graceful-fs "^4.0.0" + is-valid-glob "^1.0.0" + lazystream "^1.0.0" + lead "^1.0.0" + object.assign "^4.0.4" + pumpify "^1.3.5" + readable-stream "^2.3.3" + remove-bom-buffer "^3.0.0" + remove-bom-stream "^1.2.0" + resolve-options "^1.1.0" + through2 "^2.0.0" + to-through "^2.0.0" + value-or-function "^3.0.0" + vinyl "^2.0.0" + vinyl-sourcemap "^1.1.0" + +vinyl-sourcemap@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz" + integrity sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY= + dependencies: + append-buffer "^1.0.2" + convert-source-map "^1.5.0" + graceful-fs "^4.1.6" + normalize-path "^2.1.1" + now-and-later "^2.0.0" + remove-bom-buffer "^3.0.0" + vinyl "^2.0.0" + +vinyl@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz" + integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg== + dependencies: + clone "^2.1.1" + clone-buffer "^1.0.0" + clone-stats "^1.0.0" + cloneable-readable "^1.0.0" + remove-trailing-separator "^1.0.1" + replace-ext "^1.0.0" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz" + integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= + +which@^1.2.14: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +xtend@~4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@5.0.0-security.0: + version "5.0.0-security.0" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz" + integrity sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ== + dependencies: + camelcase "^3.0.0" + object.assign "^4.1.0" + +yargs-parser@>=5.0.0-security.0: + version "20.2.7" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz" + integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== + +yargs@^7.1.0: + version "7.1.1" + resolved "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz" + integrity sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g== + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "5.0.0-security.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==