├── .gitignore ├── images ├── icon128.png ├── icon16.png └── icon48.png ├── app ├── src │ ├── popup.js │ ├── options.js │ ├── common.js │ ├── Popup.vue │ └── Options.vue ├── .vscode │ └── extensions.json ├── popup.html ├── options.html ├── .eslintrc.cjs ├── .gitignore ├── vite.config.js ├── package.json ├── content-script.js ├── override.js ├── background.js └── yarn.lock ├── manifest.json ├── README.md └── LICENSE /.gitignore: -------------------------------------------------------------------------------- 1 | *.zip 2 | *.bk 3 | build 4 | *.crx 5 | *.pem 6 | -------------------------------------------------------------------------------- /images/icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpalmisano/webrtc-internals-exporter/HEAD/images/icon128.png -------------------------------------------------------------------------------- /images/icon16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpalmisano/webrtc-internals-exporter/HEAD/images/icon16.png -------------------------------------------------------------------------------- /images/icon48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vpalmisano/webrtc-internals-exporter/HEAD/images/icon48.png -------------------------------------------------------------------------------- /app/src/popup.js: -------------------------------------------------------------------------------- 1 | import { buildApp } from "./common"; 2 | import App from "./Popup.vue"; 3 | buildApp(App); 4 | -------------------------------------------------------------------------------- /app/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] 3 | } 4 | -------------------------------------------------------------------------------- /app/src/options.js: -------------------------------------------------------------------------------- 1 | import { buildApp } from "./common"; 2 | import App from "./Options.vue"; 3 | buildApp(App); 4 | -------------------------------------------------------------------------------- /app/popup.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | WebRTC Internals Exporter 7 | 8 | 9 |
10 | 11 | 12 | -------------------------------------------------------------------------------- /app/options.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | WebRTC Internals Exporter 7 | 8 | 9 |
10 | 11 | 12 | -------------------------------------------------------------------------------- /app/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | require("@rushstack/eslint-patch/modern-module-resolution"); 3 | 4 | module.exports = { 5 | root: true, 6 | extends: [ 7 | "plugin:vue/vue3-essential", 8 | "eslint:recommended", 9 | "@vue/eslint-config-prettier", 10 | ], 11 | parserOptions: { 12 | ecmaVersion: "latest", 13 | }, 14 | }; 15 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | .DS_Store 12 | dist 13 | dist-ssr 14 | coverage 15 | *.local 16 | 17 | /cypress/videos/ 18 | /cypress/screenshots/ 19 | 20 | # Editor directories and files 21 | .vscode/* 22 | !.vscode/extensions.json 23 | .idea 24 | *.suo 25 | *.ntvs* 26 | *.njsproj 27 | *.sln 28 | *.sw? 29 | 30 | yarn-error.log 31 | node_modules 32 | -------------------------------------------------------------------------------- /app/vite.config.js: -------------------------------------------------------------------------------- 1 | import { fileURLToPath, URL } from "node:url"; 2 | 3 | import { defineConfig } from "vite"; 4 | import vue from "@vitejs/plugin-vue"; 5 | import loadVersion from "vite-plugin-package-version"; 6 | 7 | export default defineConfig({ 8 | plugins: [loadVersion(), vue()], 9 | resolve: { 10 | alias: { 11 | "@": fileURLToPath(new URL("./src", import.meta.url)), 12 | }, 13 | }, 14 | build: { 15 | outDir: "../build", 16 | emptyOutDir: true, 17 | rollupOptions: { 18 | input: { 19 | options: "options.html", 20 | popup: "popup.html", 21 | }, 22 | output: { 23 | assetFileNames: "assets/[name][extname]", 24 | }, 25 | }, 26 | }, 27 | define: {}, 28 | }); 29 | -------------------------------------------------------------------------------- /app/src/common.js: -------------------------------------------------------------------------------- 1 | import { createApp } from "vue"; 2 | 3 | // Vuetify 4 | import "vuetify/styles"; 5 | import "@mdi/font/css/materialdesignicons.css"; 6 | import { createVuetify } from "vuetify"; 7 | import * as components from "vuetify/components"; 8 | import * as directives from "vuetify/directives"; 9 | import { md3 } from "vuetify/blueprints"; 10 | import { VDataTable } from "vuetify/labs/VDataTable"; 11 | import colors from "vuetify/lib/util/colors.mjs"; 12 | 13 | export function buildApp(App) { 14 | const vuetify = createVuetify({ 15 | components: { ...components, VDataTable }, 16 | directives, 17 | blueprint: md3, 18 | theme: { 19 | defaultTheme: "dark", 20 | themes: { 21 | dark: { 22 | dark: true, 23 | colors: { 24 | primary: colors.indigo.base, 25 | secondary: colors.indigo.lighten5, 26 | }, 27 | }, 28 | }, 29 | }, 30 | }); 31 | 32 | createApp(App, {}).use(vuetify).mount(document.querySelector("#app")); 33 | } 34 | -------------------------------------------------------------------------------- /app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@vpalmisano/webrtc-internals-exporter", 3 | "author": { 4 | "name": "Vittorio Palmisano", 5 | "url": "https://github.com/vpalmisano" 6 | }, 7 | "version": "0.1.14", 8 | "publishConfig": { 9 | "registry": "https://npm.pkg.github.com" 10 | }, 11 | "scripts": { 12 | "dev": "vite", 13 | "build": "vite build", 14 | "preview": "vite preview --port 4173", 15 | "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore" 16 | }, 17 | "dependencies": { 18 | "@popperjs/core": "^2.11.6", 19 | "bootstrap": "^5.3.2", 20 | "bootstrap-icons": "^1.11.1", 21 | "events": "^3.3.0", 22 | "pako": "^2.1.0", 23 | "util": "^0.12.4", 24 | "vue": "^3.3.8", 25 | "vuetify": "^3.3.23" 26 | }, 27 | "devDependencies": { 28 | "@mdi/font": "^7.3.67", 29 | "@rushstack/eslint-patch": "^1.1.4", 30 | "@vitejs/plugin-vue": "^4.4.0", 31 | "@vue/eslint-config-prettier": "^8.0.0", 32 | "@vuelidate/core": "^2.0.3", 33 | "@vuelidate/validators": "^2.0.4", 34 | "eslint": "^8.52.0", 35 | "eslint-plugin-vue": "^9.18.1", 36 | "prettier": "^3.0.3", 37 | "vite": "^4.5.0", 38 | "vite-plugin-package-version": "^1.0.2" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "WebRTC Internals Exporter", 3 | "description": "WebRTC Internals Exporter", 4 | "author": "Vittorio Palmisano", 5 | "version": "0.1.0", 6 | "manifest_version": 3, 7 | "icons": { 8 | "16": "images/icon16.png", 9 | "48": "images/icon48.png", 10 | "128": "images/icon128.png" 11 | }, 12 | "permissions": [ 13 | "storage", 14 | "activeTab", 15 | "tabs", 16 | "scripting", 17 | "alarms" 18 | ], 19 | "host_permissions": [ 20 | 21 | ], 22 | "action": { 23 | "default_title": "WebRTC Internals Exporter", 24 | "default_popup": "popup.html" 25 | }, 26 | "options_ui": { 27 | "page": "options.html", 28 | "open_in_tab": true 29 | }, 30 | "content_scripts": [ 31 | { 32 | "matches": [ 33 | "https://*/*", 34 | "http://*/*" 35 | ], 36 | "js": ["content-script.js"], 37 | "run_at": "document_start", 38 | "all_frames": true, 39 | "match_about_blank": true 40 | } 41 | ], 42 | "background": { 43 | "service_worker": "background.js", 44 | "type": "module" 45 | }, 46 | "web_accessible_resources": [ 47 | { 48 | "resources": ["override.js"], 49 | "matches": ["http://*/*", "https://*/*"] 50 | } 51 | ] 52 | } 53 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WebRTC Internals Exporter 2 | A Chromium browser extension that allows to collect WebRTC stats and export them to a Prometheus PushGateway service. 3 | 4 | ## Install 5 | 6 | ### Using the Chrome Web Store 7 | [Link](https://chromewebstore.google.com/detail/webrtc-internals-exporter/jbgkajlogkmfemdjhiiicelanbipacpa) 8 | 9 | ### Using the packed extension 10 | Download the `.crx` file from the [releases page](https://github.com/vpalmisano/webrtc-internals-exporter/releases) and drop it 11 | into the [chrome://extensions/](chrome://extensions/) page. 12 | Alternatively, you can download a `.zip` or `tar.gz` file from the releases page 13 | and load the decompressed folder as an unpacked extension. 14 | 15 | Ref. https://developer.chrome.com/docs/extensions/mv3/hosting/ 16 | 17 | ### From sources 18 | Run the `./build.sh` script and load the `build` folder as an unpacked extension 19 | in your Chromium browser after enabling the developer mode. 20 | 21 | ## Usage 22 | 1. Visit the extension options page, set the PushGateway URL and, optionally, the username and password. 23 | 2. Load the page where you want to collect the stats and click on the extension icon to enable the stats collection on that URL (disabled by default). 24 | 3. The stats will be collected and sent to the PushGateway service. You can use the provided [Grafana dashboard](https://github.com/vpalmisano/webrtc-internals-exporter/tree/main/grafana) to visualize them. 25 | 26 | ## Debugging 27 | The extension logs are available in the browser console after setting: 28 | ```js 29 | localStorage.setItem("webrtc-internal-exporter:debug", "true") 30 | ``` 31 | 32 | The running PeerConnections objects can be manually inspected using the following 33 | command in the browser console: 34 | ```js 35 | > webrtcInternalsExporter.peerConnections 36 | Map(1) {'b03c3616-3f91-42b5-85df-7dbebefae8bd' => RTCPeerConnection} 37 | ``` 38 | -------------------------------------------------------------------------------- /app/src/Popup.vue: -------------------------------------------------------------------------------- 1 | 61 | 62 | 105 | 106 | 112 | 113 | -------------------------------------------------------------------------------- /app/content-script.js: -------------------------------------------------------------------------------- 1 | /* global chrome */ 2 | 3 | if (window.location.protocol.startsWith("http")) { 4 | const log = (...args) => { 5 | try { 6 | if (localStorage.getItem("webrtc-internal-exporter:debug") === "true") { 7 | console.log.apply(null, [ 8 | "[webrtc-internal-exporter:content-script]", 9 | ...args, 10 | ]); 11 | } 12 | } catch (error) { 13 | // Ignore localStorage errors. 14 | } 15 | }; 16 | 17 | const injectScript = (file_path) => { 18 | const head = document.querySelector("head"); 19 | const script = document.createElement("script"); 20 | script.setAttribute("type", "text/javascript"); 21 | script.setAttribute("src", file_path); 22 | head.appendChild(script); 23 | }; 24 | 25 | setTimeout(() => injectScript(chrome.runtime.getURL("override.js"))); 26 | 27 | // Handle options. 28 | const options = { 29 | url: "", 30 | enabled: false, 31 | updateInterval: 2000, 32 | enabledStats: [], 33 | }; 34 | 35 | const sendOptions = () => { 36 | window.postMessage({ 37 | event: "webrtc-internal-exporter:options", 38 | options, 39 | }); 40 | }; 41 | 42 | try { 43 | chrome.storage.sync 44 | .get(["url", "enabledOrigins", "updateInterval", "enabledStats"]) 45 | .then((ret) => { 46 | log(`options loaded:`, ret); 47 | options.url = ret.url || ""; 48 | options.enabled = 49 | ret.enabledOrigins && 50 | ret.enabledOrigins[window.location.origin] === true; 51 | options.updateInterval = (ret.updateInterval || 2) * 1000; 52 | options.enabledStats = Object.values(ret.enabledStats || {}); 53 | sendOptions(); 54 | }); 55 | 56 | chrome.storage.onChanged.addListener((changes, area) => { 57 | if (area !== "sync") return; 58 | 59 | let changed = false; 60 | for (let [key, { newValue }] of Object.entries(changes)) { 61 | if (key === "url") { 62 | options.url = newValue; 63 | changed = true; 64 | } else if (key === "enabledOrigins") { 65 | options.enabled = newValue[window.location.origin] === true; 66 | changed = true; 67 | } else if (key === "updateInterval") { 68 | options.updateInterval = newValue * 1000; 69 | changed = true; 70 | } else if (key === "enabledStats") { 71 | options.enabledStats = Object.values(newValue); 72 | changed = true; 73 | } 74 | } 75 | if (changed) { 76 | log(`options changed:`, options); 77 | sendOptions(); 78 | } 79 | }); 80 | 81 | // Handle stats messages. 82 | window.addEventListener("message", async (message) => { 83 | if (!message?.data) return; 84 | const { event, url, id, state, values } = message.data; 85 | if (event === "webrtc-internal-exporter:ready") { 86 | sendOptions(); 87 | } else if (event === "webrtc-internal-exporter:peer-connection-stats") { 88 | log("peer-connection-stats", { url, id, state, values }); 89 | try { 90 | const response = await chrome.runtime.sendMessage({ 91 | event: "peer-connection-stats", 92 | data: { 93 | url, 94 | id, 95 | state, 96 | values, 97 | }, 98 | }); 99 | if (response.error) { 100 | log(`error: ${response.error}`); 101 | } 102 | } catch (error) { 103 | log(`error: ${error.message}`); 104 | } 105 | } 106 | }); 107 | } catch (error) { 108 | console.error( 109 | `[webrtc-internal-exporter:content-script] error: ${error.message}`, 110 | error, 111 | ); 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /app/override.js: -------------------------------------------------------------------------------- 1 | class WebrtcInternalsExporter { 2 | peerConnections = new Map(); 3 | getUserMediaStreams = new Set(); 4 | getDisplayMediaStreams = new Set(); 5 | 6 | url = ""; 7 | enabled = false; 8 | updateInterval = 2000; 9 | enabledStats = []; 10 | 11 | constructor() { 12 | window.addEventListener("message", async (message) => { 13 | if (!message?.data) return; 14 | const { event, options } = message.data; 15 | if (event === "webrtc-internal-exporter:options") { 16 | Object.assign(this, options); 17 | } 18 | }); 19 | 20 | window.postMessage({ event: "webrtc-internal-exporter:ready" }); 21 | } 22 | 23 | static log(...args) { 24 | console.log.apply(null, ["[webrtc-internal-exporter:override]", ...args]); 25 | } 26 | 27 | static randomId() { 28 | if ("randomUUID" in window.crypto) { 29 | return window.crypto.randomUUID(); 30 | } else { 31 | return (2 ** 64 * Math.random()).toString(16); 32 | } 33 | } 34 | 35 | add(pc) { 36 | const id = WebrtcInternalsExporter.randomId(); 37 | this.peerConnections.set(id, pc); 38 | pc.addEventListener("connectionstatechange", () => { 39 | if (pc.connectionState === "closed") { 40 | this.peerConnections.delete(id); 41 | } 42 | }); 43 | this.collectStats(id); 44 | } 45 | 46 | async collectStats(id) { 47 | const pc = this.peerConnections.get(id); 48 | if (!pc) return; 49 | 50 | if (this.url && this.enabled) { 51 | try { 52 | const stats = await pc.getStats(); 53 | const values = [...stats.values()].filter( 54 | (v) => 55 | ["peer-connection", ...this.enabledStats].indexOf(v.type) !== -1, 56 | ); 57 | window.postMessage( 58 | { 59 | event: "webrtc-internal-exporter:peer-connection-stats", 60 | url: window.location.href, 61 | id, 62 | state: pc.connectionState, 63 | values, 64 | }, 65 | [values], 66 | ); 67 | } catch (error) { 68 | WebrtcInternalsExporter.log(`collectStats error: ${error.message}`); 69 | } 70 | } 71 | 72 | if (pc.connectionState === "closed") { 73 | this.peerConnections.delete(id); 74 | } else { 75 | setTimeout(this.collectStats.bind(this), this.updateInterval, id); 76 | } 77 | } 78 | 79 | addGetUserMedia(stream) { 80 | this.getUserMediaStreams.add(stream); 81 | } 82 | 83 | addGetDisplayMedia(stream) { 84 | this.getDisplayMediaStreams.add(stream); 85 | } 86 | } 87 | 88 | const webrtcInternalsExporter = new WebrtcInternalsExporter(); 89 | 90 | window.RTCPeerConnection = new Proxy(window.RTCPeerConnection, { 91 | construct(target, argumentsList) { 92 | WebrtcInternalsExporter.log(`RTCPeerConnection`, argumentsList); 93 | 94 | const pc = new target(...argumentsList); 95 | 96 | webrtcInternalsExporter.add(pc); 97 | 98 | return pc; 99 | }, 100 | }); 101 | 102 | if (navigator.getUserMedia) { 103 | const nativeGetUserMedia = navigator.getUserMedia.bind(navigator); 104 | navigator.getUserMedia = async function (constraints, ...args) { 105 | WebrtcInternalsExporter.log(`getUserMedia`, constraints, args); 106 | 107 | const mediaStream = await nativeGetUserMedia(constraints, ...args); 108 | webrtcInternalsExporter.addGetUserMedia(mediaStream); 109 | return mediaStream; 110 | }; 111 | } 112 | 113 | if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { 114 | const nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind( 115 | navigator.mediaDevices, 116 | ); 117 | navigator.mediaDevices.getUserMedia = async function (constraints, ...args) { 118 | WebrtcInternalsExporter.log(`getUserMedia`, constraints, args); 119 | 120 | const mediaStream = await nativeGetUserMedia(constraints, ...args); 121 | webrtcInternalsExporter.addGetUserMedia(mediaStream); 122 | return mediaStream; 123 | }; 124 | } 125 | 126 | if (navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia) { 127 | const nativeGetDisplayMedia = navigator.mediaDevices.getDisplayMedia.bind( 128 | navigator.mediaDevices, 129 | ); 130 | navigator.mediaDevices.getDisplayMedia = async function ( 131 | constraints, 132 | ...args 133 | ) { 134 | WebrtcInternalsExporter.log(`getDisplayMedia`, constraints, args); 135 | 136 | const mediaStream = await nativeGetDisplayMedia(constraints, ...args); 137 | webrtcInternalsExporter.addGetDisplayMedia(mediaStream); 138 | return mediaStream; 139 | }; 140 | } 141 | -------------------------------------------------------------------------------- /app/src/Options.vue: -------------------------------------------------------------------------------- 1 | 114 | 115 | 263 | 264 | 269 | -------------------------------------------------------------------------------- /app/background.js: -------------------------------------------------------------------------------- 1 | /* global chrome, pako */ 2 | 3 | function log(...args) { 4 | console.log.apply(null, ["[webrtc-internal-exporter:background]", ...args]); 5 | } 6 | 7 | log("loaded"); 8 | 9 | import "/assets/pako.min.js"; 10 | 11 | const DEFAULT_OPTIONS = { 12 | url: "http://localhost:9091", 13 | username: "", 14 | password: "", 15 | updateInterval: 2, 16 | gzip: false, 17 | job: "webrtc-internals-exporter", 18 | enabledOrigins: {}, 19 | enabledStats: ["inbound-rtp", "remote-inbound-rtp", "outbound-rtp"], 20 | }; 21 | 22 | const options = {}; 23 | 24 | // Handle install/update. 25 | chrome.runtime.onInstalled.addListener(async ({ reason }) => { 26 | log("onInstalled", reason); 27 | if (reason === "install") { 28 | await chrome.storage.sync.set(DEFAULT_OPTIONS); 29 | } else if (reason === "update") { 30 | const options = await chrome.storage.sync.get(); 31 | await chrome.storage.sync.set({ 32 | ...DEFAULT_OPTIONS, 33 | ...options, 34 | }); 35 | } 36 | 37 | await chrome.alarms.create("webrtc-internals-exporter-alarm", { 38 | delayInMinutes: 1, 39 | periodInMinutes: 1, 40 | }); 41 | }); 42 | 43 | async function updateTabInfo(tab) { 44 | const tabId = tab.id; 45 | const origin = new URL(tab.url || tab.pendingUrl).origin; 46 | 47 | if (options.enabledOrigins && options.enabledOrigins[origin] === true) { 48 | const { peerConnectionsPerOrigin } = await chrome.storage.local.get( 49 | "peerConnectionsPerOrigin", 50 | ); 51 | const peerConnections = 52 | (peerConnectionsPerOrigin && peerConnectionsPerOrigin[origin]) || 0; 53 | 54 | chrome.action.setTitle({ 55 | title: `WebRTC Internals Exporter\nActive Peer Connections: ${peerConnections}`, 56 | tabId, 57 | }); 58 | chrome.action.setBadgeText({ text: `${peerConnections}`, tabId }); 59 | chrome.action.setBadgeBackgroundColor({ color: "rgb(63, 81, 181)", tabId }); 60 | } else { 61 | chrome.action.setTitle({ 62 | title: `WebRTC Internals Exporter (disabled)`, 63 | tabId, 64 | }); 65 | chrome.action.setBadgeText({ text: "", tabId }); 66 | } 67 | } 68 | 69 | async function optionsUpdated() { 70 | const [tab] = await chrome.tabs.query({ 71 | active: true, 72 | lastFocusedWindow: true, 73 | }); 74 | await updateTabInfo(tab); 75 | } 76 | 77 | chrome.storage.sync.get().then((ret) => { 78 | Object.assign(options, ret); 79 | log("options loaded"); 80 | optionsUpdated(); 81 | }); 82 | 83 | chrome.storage.onChanged.addListener((changes, areaName) => { 84 | if (areaName !== "sync") return; 85 | 86 | for (let [key, { newValue }] of Object.entries(changes)) { 87 | options[key] = newValue; 88 | } 89 | log("options changed"); 90 | optionsUpdated(); 91 | }); 92 | 93 | chrome.tabs.onActivated.addListener(async ({ tabId }) => { 94 | try { 95 | const tab = await chrome.tabs.get(tabId); 96 | await updateTabInfo(tab); 97 | } catch (err) { 98 | log(`get tab error: ${err.message}`); 99 | } 100 | }); 101 | 102 | chrome.tabs.onUpdated.addListener(async (tabId, changeInfo) => { 103 | if (!changeInfo.url) return; 104 | await updateTabInfo({ id: tabId, url: changeInfo.url }); 105 | }); 106 | 107 | chrome.alarms.onAlarm.addListener((alarm) => { 108 | if (alarm.name === "webrtc-internals-exporter-alarm") { 109 | cleanupPeerConnections().catch((err) => { 110 | log(`cleanup peer connections error: ${err.message}`); 111 | }); 112 | } 113 | }); 114 | 115 | async function setPeerConnectionLastUpdate({ id, origin }, lastUpdate = 0) { 116 | let { peerConnectionsLastUpdate } = await chrome.storage.local.get( 117 | "peerConnectionsLastUpdate", 118 | ); 119 | if (!peerConnectionsLastUpdate) { 120 | peerConnectionsLastUpdate = {}; 121 | } 122 | if (lastUpdate) { 123 | peerConnectionsLastUpdate[id] = { origin, lastUpdate }; 124 | } else { 125 | delete peerConnectionsLastUpdate[id]; 126 | } 127 | await chrome.storage.local.set({ peerConnectionsLastUpdate }); 128 | 129 | const peerConnectionsPerOrigin = {}; 130 | Object.values(peerConnectionsLastUpdate).forEach(({ origin: o }) => { 131 | if (!peerConnectionsPerOrigin[o]) { 132 | peerConnectionsPerOrigin[o] = 0; 133 | } 134 | peerConnectionsPerOrigin[o]++; 135 | }); 136 | await chrome.storage.local.set({ peerConnectionsPerOrigin }); 137 | await optionsUpdated(); 138 | } 139 | 140 | async function cleanupPeerConnections() { 141 | let { peerConnectionsLastUpdate } = await chrome.storage.local.get( 142 | "peerConnectionsLastUpdate", 143 | ); 144 | if ( 145 | !peerConnectionsLastUpdate || 146 | !Object.keys(peerConnectionsLastUpdate).length 147 | ) { 148 | return; 149 | } 150 | 151 | log( 152 | `checking stale peer connections (${ 153 | Object.keys(peerConnectionsLastUpdate).length 154 | } total)`, 155 | ); 156 | const now = Date.now(); 157 | await Promise.allSettled( 158 | Object.entries(peerConnectionsLastUpdate) 159 | .map(([id, { origin, lastUpdate }]) => { 160 | if ( 161 | now - lastUpdate > 162 | Math.max(2 * options.updateInterval, 30) * 1000 163 | ) { 164 | return { id, origin }; 165 | } 166 | }) 167 | .filter((ret) => !!ret?.id) 168 | .map(({ id, origin }) => { 169 | log(`removing stale peer connection metrics: ${id} ${origin}`); 170 | return sendData("DELETE", { id, origin }); 171 | }), 172 | ); 173 | } 174 | 175 | // Send data to pushgateway. 176 | async function sendData(method, { id, origin }, data) { 177 | const { url, username, password, gzip, job } = options; 178 | const headers = { 179 | "Content-Type": "application/x-www-form-urlencoded", 180 | }; 181 | if (username && password) { 182 | headers.Authorization = "Basic " + btoa(`${username}:${password}`); 183 | } 184 | if (data && gzip) { 185 | headers["Content-Encoding"] = "gzip"; 186 | data = await pako.gzip(data); 187 | } 188 | /* console.log( 189 | `[webrtc-internals-exporter] sendData: ${data.length} bytes (gzip: ${gzip}) url: ${url} job: ${job}`, 190 | ); */ 191 | const start = Date.now(); 192 | const response = await fetch( 193 | `${url}/metrics/job/${job}/peerConnectionId/${id}`, 194 | { 195 | method, 196 | headers, 197 | body: method === "POST" ? data : undefined, 198 | }, 199 | ); 200 | 201 | const stats = await chrome.storage.local.get([ 202 | "messagesSent", 203 | "bytesSent", 204 | "totalTime", 205 | "errors", 206 | ]); 207 | if (data) { 208 | stats.messagesSent = (stats.messagesSent || 0) + 1; 209 | stats.bytesSent = (stats.bytesSent || 0) + data.length; 210 | stats.totalTime = (stats.totalTime || 0) + Date.now() - start; 211 | } 212 | if (!response.ok) { 213 | stats.errors = (stats.errors || 0) + 1; 214 | } 215 | await chrome.storage.local.set(stats); 216 | 217 | if (!response.ok) { 218 | const text = await response.text(); 219 | throw new Error(`Response status: ${response.status} error: ${text}`); 220 | } 221 | 222 | await setPeerConnectionLastUpdate( 223 | { id, origin }, 224 | method === "POST" ? start : undefined, 225 | ); 226 | 227 | return response.text(); 228 | } 229 | 230 | const QualityLimitationReasons = { 231 | none: 0, 232 | bandwidth: 1, 233 | cpu: 2, 234 | other: 3, 235 | }; 236 | 237 | /** 238 | * sendPeerConnectionStats 239 | * @param {string} url 240 | * @param {string} id 241 | * @param {RTCPeerConnectionState} state 242 | * @param {any} values 243 | */ 244 | async function sendPeerConnectionStats(url, id, state, values) { 245 | const origin = new URL(url).origin; 246 | 247 | if (state === "closed") { 248 | return sendData("DELETE", { id, origin }); 249 | } 250 | 251 | let data = ""; 252 | const sentTypes = new Set(); 253 | 254 | values.forEach((value) => { 255 | const type = value.type.replace(/-/g, "_"); 256 | const labels = [`pageUrl="${url}"`]; 257 | const metrics = []; 258 | 259 | if (value.type === "peer-connection") { 260 | labels.push(`state="${state}"`); 261 | } 262 | 263 | Object.entries(value).forEach(([key, v]) => { 264 | if (typeof v === "number") { 265 | metrics.push([key, v]); 266 | } else if (typeof v === "object") { 267 | Object.entries(v).forEach(([subkey, subv]) => { 268 | if (typeof subv === "number") { 269 | metrics.push([`${key}_${subkey}`, subv]); 270 | } 271 | }); 272 | } else if ( 273 | key === "qualityLimitationReason" && 274 | QualityLimitationReasons[v] !== undefined 275 | ) { 276 | metrics.push([key, QualityLimitationReasons[v]]); 277 | } else if (key === "googTimingFrameInfo") { 278 | // TODO 279 | } else { 280 | labels.push(`${key}="${v}"`); 281 | } 282 | }); 283 | 284 | metrics.forEach(([key, v]) => { 285 | const name = `${type}_${key.replace(/-/g, "_")}`; 286 | let typeDesc = ""; 287 | 288 | if (!sentTypes.has(name)) { 289 | typeDesc = `# TYPE ${name} gauge\n`; 290 | sentTypes.add(name); 291 | } 292 | data += `${typeDesc}${name}{${labels.join(",")}} ${v}\n`; 293 | }); 294 | }); 295 | 296 | if (data.length > 0) { 297 | return sendData("POST", { id, origin }, data + "\n"); 298 | } 299 | } 300 | 301 | chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { 302 | if (message.event === "peer-connection-stats") { 303 | const { url, id, state, values } = message.data; 304 | 305 | sendPeerConnectionStats(url, id, state, values) 306 | .then(() => { 307 | sendResponse({}); 308 | }) 309 | .catch((err) => { 310 | sendResponse({ error: err.message }); 311 | }); 312 | } else { 313 | sendResponse({ error: "unknown event" }); 314 | } 315 | 316 | return true; 317 | }); 318 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU AFFERO GENERAL PUBLIC LICENSE 2 | Version 3, 19 November 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU Affero General Public License is a free, copyleft license for 11 | software and other kinds of works, specifically designed to ensure 12 | cooperation with the community in the case of network server software. 13 | 14 | The licenses for most software and other practical works are designed 15 | to take away your freedom to share and change the works. By contrast, 16 | our General Public Licenses are intended to guarantee your freedom to 17 | share and change all versions of a program--to make sure it remains free 18 | software for all its users. 19 | 20 | When we speak of free software, we are referring to freedom, not 21 | price. Our General Public Licenses are designed to make sure that you 22 | have the freedom to distribute copies of free software (and charge for 23 | them if you wish), that you receive source code or can get it if you 24 | want it, that you can change the software or use pieces of it in new 25 | free programs, and that you know you can do these things. 26 | 27 | Developers that use our General Public Licenses protect your rights 28 | with two steps: (1) assert copyright on the software, and (2) offer 29 | you this License which gives you legal permission to copy, distribute 30 | and/or modify the software. 31 | 32 | A secondary benefit of defending all users' freedom is that 33 | improvements made in alternate versions of the program, if they 34 | receive widespread use, become available for other developers to 35 | incorporate. Many developers of free software are heartened and 36 | encouraged by the resulting cooperation. However, in the case of 37 | software used on network servers, this result may fail to come about. 38 | The GNU General Public License permits making a modified version and 39 | letting the public access it on a server without ever releasing its 40 | source code to the public. 41 | 42 | The GNU Affero General Public License is designed specifically to 43 | ensure that, in such cases, the modified source code becomes available 44 | to the community. It requires the operator of a network server to 45 | provide the source code of the modified version running there to the 46 | users of that server. Therefore, public use of a modified version, on 47 | a publicly accessible server, gives the public access to the source 48 | code of the modified version. 49 | 50 | An older license, called the Affero General Public License and 51 | published by Affero, was designed to accomplish similar goals. This is 52 | a different license, not a version of the Affero GPL, but Affero has 53 | released a new version of the Affero GPL which permits relicensing under 54 | this license. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | TERMS AND CONDITIONS 60 | 61 | 0. Definitions. 62 | 63 | "This License" refers to version 3 of the GNU Affero General Public License. 64 | 65 | "Copyright" also means copyright-like laws that apply to other kinds of 66 | works, such as semiconductor masks. 67 | 68 | "The Program" refers to any copyrightable work licensed under this 69 | License. Each licensee is addressed as "you". "Licensees" and 70 | "recipients" may be individuals or organizations. 71 | 72 | To "modify" a work means to copy from or adapt all or part of the work 73 | in a fashion requiring copyright permission, other than the making of an 74 | exact copy. The resulting work is called a "modified version" of the 75 | earlier work or a work "based on" the earlier work. 76 | 77 | A "covered work" means either the unmodified Program or a work based 78 | on the Program. 79 | 80 | To "propagate" a work means to do anything with it that, without 81 | permission, would make you directly or secondarily liable for 82 | infringement under applicable copyright law, except executing it on a 83 | computer or modifying a private copy. Propagation includes copying, 84 | distribution (with or without modification), making available to the 85 | public, and in some countries other activities as well. 86 | 87 | To "convey" a work means any kind of propagation that enables other 88 | parties to make or receive copies. Mere interaction with a user through 89 | a computer network, with no transfer of a copy, is not conveying. 90 | 91 | An interactive user interface displays "Appropriate Legal Notices" 92 | to the extent that it includes a convenient and prominently visible 93 | feature that (1) displays an appropriate copyright notice, and (2) 94 | tells the user that there is no warranty for the work (except to the 95 | extent that warranties are provided), that licensees may convey the 96 | work under this License, and how to view a copy of this License. If 97 | the interface presents a list of user commands or options, such as a 98 | menu, a prominent item in the list meets this criterion. 99 | 100 | 1. Source Code. 101 | 102 | The "source code" for a work means the preferred form of the work 103 | for making modifications to it. "Object code" means any non-source 104 | form of a work. 105 | 106 | A "Standard Interface" means an interface that either is an official 107 | standard defined by a recognized standards body, or, in the case of 108 | interfaces specified for a particular programming language, one that 109 | is widely used among developers working in that language. 110 | 111 | The "System Libraries" of an executable work include anything, other 112 | than the work as a whole, that (a) is included in the normal form of 113 | packaging a Major Component, but which is not part of that Major 114 | Component, and (b) serves only to enable use of the work with that 115 | Major Component, or to implement a Standard Interface for which an 116 | implementation is available to the public in source code form. A 117 | "Major Component", in this context, means a major essential component 118 | (kernel, window system, and so on) of the specific operating system 119 | (if any) on which the executable work runs, or a compiler used to 120 | produce the work, or an object code interpreter used to run it. 121 | 122 | The "Corresponding Source" for a work in object code form means all 123 | the source code needed to generate, install, and (for an executable 124 | work) run the object code and to modify the work, including scripts to 125 | control those activities. However, it does not include the work's 126 | System Libraries, or general-purpose tools or generally available free 127 | programs which are used unmodified in performing those activities but 128 | which are not part of the work. For example, Corresponding Source 129 | includes interface definition files associated with source files for 130 | the work, and the source code for shared libraries and dynamically 131 | linked subprograms that the work is specifically designed to require, 132 | such as by intimate data communication or control flow between those 133 | subprograms and other parts of the work. 134 | 135 | The Corresponding Source need not include anything that users 136 | can regenerate automatically from other parts of the Corresponding 137 | Source. 138 | 139 | The Corresponding Source for a work in source code form is that 140 | same work. 141 | 142 | 2. Basic Permissions. 143 | 144 | All rights granted under this License are granted for the term of 145 | copyright on the Program, and are irrevocable provided the stated 146 | conditions are met. This License explicitly affirms your unlimited 147 | permission to run the unmodified Program. The output from running a 148 | covered work is covered by this License only if the output, given its 149 | content, constitutes a covered work. This License acknowledges your 150 | rights of fair use or other equivalent, as provided by copyright law. 151 | 152 | You may make, run and propagate covered works that you do not 153 | convey, without conditions so long as your license otherwise remains 154 | in force. You may convey covered works to others for the sole purpose 155 | of having them make modifications exclusively for you, or provide you 156 | with facilities for running those works, provided that you comply with 157 | the terms of this License in conveying all material for which you do 158 | not control copyright. Those thus making or running the covered works 159 | for you must do so exclusively on your behalf, under your direction 160 | and control, on terms that prohibit them from making any copies of 161 | your copyrighted material outside their relationship with you. 162 | 163 | Conveying under any other circumstances is permitted solely under 164 | the conditions stated below. Sublicensing is not allowed; section 10 165 | makes it unnecessary. 166 | 167 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 168 | 169 | No covered work shall be deemed part of an effective technological 170 | measure under any applicable law fulfilling obligations under article 171 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 172 | similar laws prohibiting or restricting circumvention of such 173 | measures. 174 | 175 | When you convey a covered work, you waive any legal power to forbid 176 | circumvention of technological measures to the extent such circumvention 177 | is effected by exercising rights under this License with respect to 178 | the covered work, and you disclaim any intention to limit operation or 179 | modification of the work as a means of enforcing, against the work's 180 | users, your or third parties' legal rights to forbid circumvention of 181 | technological measures. 182 | 183 | 4. Conveying Verbatim Copies. 184 | 185 | You may convey verbatim copies of the Program's source code as you 186 | receive it, in any medium, provided that you conspicuously and 187 | appropriately publish on each copy an appropriate copyright notice; 188 | keep intact all notices stating that this License and any 189 | non-permissive terms added in accord with section 7 apply to the code; 190 | keep intact all notices of the absence of any warranty; and give all 191 | recipients a copy of this License along with the Program. 192 | 193 | You may charge any price or no price for each copy that you convey, 194 | and you may offer support or warranty protection for a fee. 195 | 196 | 5. Conveying Modified Source Versions. 197 | 198 | You may convey a work based on the Program, or the modifications to 199 | produce it from the Program, in the form of source code under the 200 | terms of section 4, provided that you also meet all of these conditions: 201 | 202 | a) The work must carry prominent notices stating that you modified 203 | it, and giving a relevant date. 204 | 205 | b) The work must carry prominent notices stating that it is 206 | released under this License and any conditions added under section 207 | 7. This requirement modifies the requirement in section 4 to 208 | "keep intact all notices". 209 | 210 | c) You must license the entire work, as a whole, under this 211 | License to anyone who comes into possession of a copy. This 212 | License will therefore apply, along with any applicable section 7 213 | additional terms, to the whole of the work, and all its parts, 214 | regardless of how they are packaged. This License gives no 215 | permission to license the work in any other way, but it does not 216 | invalidate such permission if you have separately received it. 217 | 218 | d) If the work has interactive user interfaces, each must display 219 | Appropriate Legal Notices; however, if the Program has interactive 220 | interfaces that do not display Appropriate Legal Notices, your 221 | work need not make them do so. 222 | 223 | A compilation of a covered work with other separate and independent 224 | works, which are not by their nature extensions of the covered work, 225 | and which are not combined with it such as to form a larger program, 226 | in or on a volume of a storage or distribution medium, is called an 227 | "aggregate" if the compilation and its resulting copyright are not 228 | used to limit the access or legal rights of the compilation's users 229 | beyond what the individual works permit. Inclusion of a covered work 230 | in an aggregate does not cause this License to apply to the other 231 | parts of the aggregate. 232 | 233 | 6. Conveying Non-Source Forms. 234 | 235 | You may convey a covered work in object code form under the terms 236 | of sections 4 and 5, provided that you also convey the 237 | machine-readable Corresponding Source under the terms of this License, 238 | in one of these ways: 239 | 240 | a) Convey the object code in, or embodied in, a physical product 241 | (including a physical distribution medium), accompanied by the 242 | Corresponding Source fixed on a durable physical medium 243 | customarily used for software interchange. 244 | 245 | b) Convey the object code in, or embodied in, a physical product 246 | (including a physical distribution medium), accompanied by a 247 | written offer, valid for at least three years and valid for as 248 | long as you offer spare parts or customer support for that product 249 | model, to give anyone who possesses the object code either (1) a 250 | copy of the Corresponding Source for all the software in the 251 | product that is covered by this License, on a durable physical 252 | medium customarily used for software interchange, for a price no 253 | more than your reasonable cost of physically performing this 254 | conveying of source, or (2) access to copy the 255 | Corresponding Source from a network server at no charge. 256 | 257 | c) Convey individual copies of the object code with a copy of the 258 | written offer to provide the Corresponding Source. This 259 | alternative is allowed only occasionally and noncommercially, and 260 | only if you received the object code with such an offer, in accord 261 | with subsection 6b. 262 | 263 | d) Convey the object code by offering access from a designated 264 | place (gratis or for a charge), and offer equivalent access to the 265 | Corresponding Source in the same way through the same place at no 266 | further charge. You need not require recipients to copy the 267 | Corresponding Source along with the object code. If the place to 268 | copy the object code is a network server, the Corresponding Source 269 | may be on a different server (operated by you or a third party) 270 | that supports equivalent copying facilities, provided you maintain 271 | clear directions next to the object code saying where to find the 272 | Corresponding Source. Regardless of what server hosts the 273 | Corresponding Source, you remain obligated to ensure that it is 274 | available for as long as needed to satisfy these requirements. 275 | 276 | e) Convey the object code using peer-to-peer transmission, provided 277 | you inform other peers where the object code and Corresponding 278 | Source of the work are being offered to the general public at no 279 | charge under subsection 6d. 280 | 281 | A separable portion of the object code, whose source code is excluded 282 | from the Corresponding Source as a System Library, need not be 283 | included in conveying the object code work. 284 | 285 | A "User Product" is either (1) a "consumer product", which means any 286 | tangible personal property which is normally used for personal, family, 287 | or household purposes, or (2) anything designed or sold for incorporation 288 | into a dwelling. In determining whether a product is a consumer product, 289 | doubtful cases shall be resolved in favor of coverage. For a particular 290 | product received by a particular user, "normally used" refers to a 291 | typical or common use of that class of product, regardless of the status 292 | of the particular user or of the way in which the particular user 293 | actually uses, or expects or is expected to use, the product. A product 294 | is a consumer product regardless of whether the product has substantial 295 | commercial, industrial or non-consumer uses, unless such uses represent 296 | the only significant mode of use of the product. 297 | 298 | "Installation Information" for a User Product means any methods, 299 | procedures, authorization keys, or other information required to install 300 | and execute modified versions of a covered work in that User Product from 301 | a modified version of its Corresponding Source. The information must 302 | suffice to ensure that the continued functioning of the modified object 303 | code is in no case prevented or interfered with solely because 304 | modification has been made. 305 | 306 | If you convey an object code work under this section in, or with, or 307 | specifically for use in, a User Product, and the conveying occurs as 308 | part of a transaction in which the right of possession and use of the 309 | User Product is transferred to the recipient in perpetuity or for a 310 | fixed term (regardless of how the transaction is characterized), the 311 | Corresponding Source conveyed under this section must be accompanied 312 | by the Installation Information. But this requirement does not apply 313 | if neither you nor any third party retains the ability to install 314 | modified object code on the User Product (for example, the work has 315 | been installed in ROM). 316 | 317 | The requirement to provide Installation Information does not include a 318 | requirement to continue to provide support service, warranty, or updates 319 | for a work that has been modified or installed by the recipient, or for 320 | the User Product in which it has been modified or installed. Access to a 321 | network may be denied when the modification itself materially and 322 | adversely affects the operation of the network or violates the rules and 323 | protocols for communication across the network. 324 | 325 | Corresponding Source conveyed, and Installation Information provided, 326 | in accord with this section must be in a format that is publicly 327 | documented (and with an implementation available to the public in 328 | source code form), and must require no special password or key for 329 | unpacking, reading or copying. 330 | 331 | 7. Additional Terms. 332 | 333 | "Additional permissions" are terms that supplement the terms of this 334 | License by making exceptions from one or more of its conditions. 335 | Additional permissions that are applicable to the entire Program shall 336 | be treated as though they were included in this License, to the extent 337 | that they are valid under applicable law. If additional permissions 338 | apply only to part of the Program, that part may be used separately 339 | under those permissions, but the entire Program remains governed by 340 | this License without regard to the additional permissions. 341 | 342 | When you convey a copy of a covered work, you may at your option 343 | remove any additional permissions from that copy, or from any part of 344 | it. (Additional permissions may be written to require their own 345 | removal in certain cases when you modify the work.) You may place 346 | additional permissions on material, added by you to a covered work, 347 | for which you have or can give appropriate copyright permission. 348 | 349 | Notwithstanding any other provision of this License, for material you 350 | add to a covered work, you may (if authorized by the copyright holders of 351 | that material) supplement the terms of this License with terms: 352 | 353 | a) Disclaiming warranty or limiting liability differently from the 354 | terms of sections 15 and 16 of this License; or 355 | 356 | b) Requiring preservation of specified reasonable legal notices or 357 | author attributions in that material or in the Appropriate Legal 358 | Notices displayed by works containing it; or 359 | 360 | c) Prohibiting misrepresentation of the origin of that material, or 361 | requiring that modified versions of such material be marked in 362 | reasonable ways as different from the original version; or 363 | 364 | d) Limiting the use for publicity purposes of names of licensors or 365 | authors of the material; or 366 | 367 | e) Declining to grant rights under trademark law for use of some 368 | trade names, trademarks, or service marks; or 369 | 370 | f) Requiring indemnification of licensors and authors of that 371 | material by anyone who conveys the material (or modified versions of 372 | it) with contractual assumptions of liability to the recipient, for 373 | any liability that these contractual assumptions directly impose on 374 | those licensors and authors. 375 | 376 | All other non-permissive additional terms are considered "further 377 | restrictions" within the meaning of section 10. If the Program as you 378 | received it, or any part of it, contains a notice stating that it is 379 | governed by this License along with a term that is a further 380 | restriction, you may remove that term. If a license document contains 381 | a further restriction but permits relicensing or conveying under this 382 | License, you may add to a covered work material governed by the terms 383 | of that license document, provided that the further restriction does 384 | not survive such relicensing or conveying. 385 | 386 | If you add terms to a covered work in accord with this section, you 387 | must place, in the relevant source files, a statement of the 388 | additional terms that apply to those files, or a notice indicating 389 | where to find the applicable terms. 390 | 391 | Additional terms, permissive or non-permissive, may be stated in the 392 | form of a separately written license, or stated as exceptions; 393 | the above requirements apply either way. 394 | 395 | 8. Termination. 396 | 397 | You may not propagate or modify a covered work except as expressly 398 | provided under this License. Any attempt otherwise to propagate or 399 | modify it is void, and will automatically terminate your rights under 400 | this License (including any patent licenses granted under the third 401 | paragraph of section 11). 402 | 403 | However, if you cease all violation of this License, then your 404 | license from a particular copyright holder is reinstated (a) 405 | provisionally, unless and until the copyright holder explicitly and 406 | finally terminates your license, and (b) permanently, if the copyright 407 | holder fails to notify you of the violation by some reasonable means 408 | prior to 60 days after the cessation. 409 | 410 | Moreover, your license from a particular copyright holder is 411 | reinstated permanently if the copyright holder notifies you of the 412 | violation by some reasonable means, this is the first time you have 413 | received notice of violation of this License (for any work) from that 414 | copyright holder, and you cure the violation prior to 30 days after 415 | your receipt of the notice. 416 | 417 | Termination of your rights under this section does not terminate the 418 | licenses of parties who have received copies or rights from you under 419 | this License. If your rights have been terminated and not permanently 420 | reinstated, you do not qualify to receive new licenses for the same 421 | material under section 10. 422 | 423 | 9. Acceptance Not Required for Having Copies. 424 | 425 | You are not required to accept this License in order to receive or 426 | run a copy of the Program. Ancillary propagation of a covered work 427 | occurring solely as a consequence of using peer-to-peer transmission 428 | to receive a copy likewise does not require acceptance. However, 429 | nothing other than this License grants you permission to propagate or 430 | modify any covered work. These actions infringe copyright if you do 431 | not accept this License. Therefore, by modifying or propagating a 432 | covered work, you indicate your acceptance of this License to do so. 433 | 434 | 10. Automatic Licensing of Downstream Recipients. 435 | 436 | Each time you convey a covered work, the recipient automatically 437 | receives a license from the original licensors, to run, modify and 438 | propagate that work, subject to this License. You are not responsible 439 | for enforcing compliance by third parties with this License. 440 | 441 | An "entity transaction" is a transaction transferring control of an 442 | organization, or substantially all assets of one, or subdividing an 443 | organization, or merging organizations. If propagation of a covered 444 | work results from an entity transaction, each party to that 445 | transaction who receives a copy of the work also receives whatever 446 | licenses to the work the party's predecessor in interest had or could 447 | give under the previous paragraph, plus a right to possession of the 448 | Corresponding Source of the work from the predecessor in interest, if 449 | the predecessor has it or can get it with reasonable efforts. 450 | 451 | You may not impose any further restrictions on the exercise of the 452 | rights granted or affirmed under this License. For example, you may 453 | not impose a license fee, royalty, or other charge for exercise of 454 | rights granted under this License, and you may not initiate litigation 455 | (including a cross-claim or counterclaim in a lawsuit) alleging that 456 | any patent claim is infringed by making, using, selling, offering for 457 | sale, or importing the Program or any portion of it. 458 | 459 | 11. Patents. 460 | 461 | A "contributor" is a copyright holder who authorizes use under this 462 | License of the Program or a work on which the Program is based. The 463 | work thus licensed is called the contributor's "contributor version". 464 | 465 | A contributor's "essential patent claims" are all patent claims 466 | owned or controlled by the contributor, whether already acquired or 467 | hereafter acquired, that would be infringed by some manner, permitted 468 | by this License, of making, using, or selling its contributor version, 469 | but do not include claims that would be infringed only as a 470 | consequence of further modification of the contributor version. For 471 | purposes of this definition, "control" includes the right to grant 472 | patent sublicenses in a manner consistent with the requirements of 473 | this License. 474 | 475 | Each contributor grants you a non-exclusive, worldwide, royalty-free 476 | patent license under the contributor's essential patent claims, to 477 | make, use, sell, offer for sale, import and otherwise run, modify and 478 | propagate the contents of its contributor version. 479 | 480 | In the following three paragraphs, a "patent license" is any express 481 | agreement or commitment, however denominated, not to enforce a patent 482 | (such as an express permission to practice a patent or covenant not to 483 | sue for patent infringement). To "grant" such a patent license to a 484 | party means to make such an agreement or commitment not to enforce a 485 | patent against the party. 486 | 487 | If you convey a covered work, knowingly relying on a patent license, 488 | and the Corresponding Source of the work is not available for anyone 489 | to copy, free of charge and under the terms of this License, through a 490 | publicly available network server or other readily accessible means, 491 | then you must either (1) cause the Corresponding Source to be so 492 | available, or (2) arrange to deprive yourself of the benefit of the 493 | patent license for this particular work, or (3) arrange, in a manner 494 | consistent with the requirements of this License, to extend the patent 495 | license to downstream recipients. "Knowingly relying" means you have 496 | actual knowledge that, but for the patent license, your conveying the 497 | covered work in a country, or your recipient's use of the covered work 498 | in a country, would infringe one or more identifiable patents in that 499 | country that you have reason to believe are valid. 500 | 501 | If, pursuant to or in connection with a single transaction or 502 | arrangement, you convey, or propagate by procuring conveyance of, a 503 | covered work, and grant a patent license to some of the parties 504 | receiving the covered work authorizing them to use, propagate, modify 505 | or convey a specific copy of the covered work, then the patent license 506 | you grant is automatically extended to all recipients of the covered 507 | work and works based on it. 508 | 509 | A patent license is "discriminatory" if it does not include within 510 | the scope of its coverage, prohibits the exercise of, or is 511 | conditioned on the non-exercise of one or more of the rights that are 512 | specifically granted under this License. You may not convey a covered 513 | work if you are a party to an arrangement with a third party that is 514 | in the business of distributing software, under which you make payment 515 | to the third party based on the extent of your activity of conveying 516 | the work, and under which the third party grants, to any of the 517 | parties who would receive the covered work from you, a discriminatory 518 | patent license (a) in connection with copies of the covered work 519 | conveyed by you (or copies made from those copies), or (b) primarily 520 | for and in connection with specific products or compilations that 521 | contain the covered work, unless you entered into that arrangement, 522 | or that patent license was granted, prior to 28 March 2007. 523 | 524 | Nothing in this License shall be construed as excluding or limiting 525 | any implied license or other defenses to infringement that may 526 | otherwise be available to you under applicable patent law. 527 | 528 | 12. No Surrender of Others' Freedom. 529 | 530 | If conditions are imposed on you (whether by court order, agreement or 531 | otherwise) that contradict the conditions of this License, they do not 532 | excuse you from the conditions of this License. If you cannot convey a 533 | covered work so as to satisfy simultaneously your obligations under this 534 | License and any other pertinent obligations, then as a consequence you may 535 | not convey it at all. For example, if you agree to terms that obligate you 536 | to collect a royalty for further conveying from those to whom you convey 537 | the Program, the only way you could satisfy both those terms and this 538 | License would be to refrain entirely from conveying the Program. 539 | 540 | 13. Remote Network Interaction; Use with the GNU General Public License. 541 | 542 | Notwithstanding any other provision of this License, if you modify the 543 | Program, your modified version must prominently offer all users 544 | interacting with it remotely through a computer network (if your version 545 | supports such interaction) an opportunity to receive the Corresponding 546 | Source of your version by providing access to the Corresponding Source 547 | from a network server at no charge, through some standard or customary 548 | means of facilitating copying of software. This Corresponding Source 549 | shall include the Corresponding Source for any work covered by version 3 550 | of the GNU General Public License that is incorporated pursuant to the 551 | following paragraph. 552 | 553 | Notwithstanding any other provision of this License, you have 554 | permission to link or combine any covered work with a work licensed 555 | under version 3 of the GNU General Public License into a single 556 | combined work, and to convey the resulting work. The terms of this 557 | License will continue to apply to the part which is the covered work, 558 | but the work with which it is combined will remain governed by version 559 | 3 of the GNU General Public License. 560 | 561 | 14. Revised Versions of this License. 562 | 563 | The Free Software Foundation may publish revised and/or new versions of 564 | the GNU Affero General Public License from time to time. Such new versions 565 | will be similar in spirit to the present version, but may differ in detail to 566 | address new problems or concerns. 567 | 568 | Each version is given a distinguishing version number. If the 569 | Program specifies that a certain numbered version of the GNU Affero General 570 | Public License "or any later version" applies to it, you have the 571 | option of following the terms and conditions either of that numbered 572 | version or of any later version published by the Free Software 573 | Foundation. If the Program does not specify a version number of the 574 | GNU Affero General Public License, you may choose any version ever published 575 | by the Free Software Foundation. 576 | 577 | If the Program specifies that a proxy can decide which future 578 | versions of the GNU Affero General Public License can be used, that proxy's 579 | public statement of acceptance of a version permanently authorizes you 580 | to choose that version for the Program. 581 | 582 | Later license versions may give you additional or different 583 | permissions. However, no additional obligations are imposed on any 584 | author or copyright holder as a result of your choosing to follow a 585 | later version. 586 | 587 | 15. Disclaimer of Warranty. 588 | 589 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 590 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 591 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 592 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 593 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 594 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 595 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 596 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 597 | 598 | 16. Limitation of Liability. 599 | 600 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 601 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 602 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 603 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 604 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 605 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 606 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 607 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 608 | SUCH DAMAGES. 609 | 610 | 17. Interpretation of Sections 15 and 16. 611 | 612 | If the disclaimer of warranty and limitation of liability provided 613 | above cannot be given local legal effect according to their terms, 614 | reviewing courts shall apply local law that most closely approximates 615 | an absolute waiver of all civil liability in connection with the 616 | Program, unless a warranty or assumption of liability accompanies a 617 | copy of the Program in return for a fee. 618 | 619 | END OF TERMS AND CONDITIONS 620 | 621 | How to Apply These Terms to Your New Programs 622 | 623 | If you develop a new program, and you want it to be of the greatest 624 | possible use to the public, the best way to achieve this is to make it 625 | free software which everyone can redistribute and change under these terms. 626 | 627 | To do so, attach the following notices to the program. It is safest 628 | to attach them to the start of each source file to most effectively 629 | state the exclusion of warranty; and each file should have at least 630 | the "copyright" line and a pointer to where the full notice is found. 631 | 632 | 633 | Copyright (C) 634 | 635 | This program is free software: you can redistribute it and/or modify 636 | it under the terms of the GNU Affero General Public License as published 637 | by the Free Software Foundation, either version 3 of the License, or 638 | (at your option) any later version. 639 | 640 | This program is distributed in the hope that it will be useful, 641 | but WITHOUT ANY WARRANTY; without even the implied warranty of 642 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 643 | GNU Affero General Public License for more details. 644 | 645 | You should have received a copy of the GNU Affero General Public License 646 | along with this program. If not, see . 647 | 648 | Also add information on how to contact you by electronic and paper mail. 649 | 650 | If your software can interact with users remotely through a computer 651 | network, you should also make sure that it provides a way for users to 652 | get its source. For example, if your program is a web application, its 653 | interface could display a "Source" link that leads users to an archive 654 | of the code. There are many ways you could offer source, and different 655 | solutions will be better for different programs; see section 13 for the 656 | specific requirements. 657 | 658 | You should also get your employer (if you work as a programmer) or school, 659 | if any, to sign a "copyright disclaimer" for the program, if necessary. 660 | For more information on this, and how to apply and follow the GNU AGPL, see 661 | . 662 | -------------------------------------------------------------------------------- /app/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@aashutoshrathi/word-wrap@^1.2.3": 6 | version "1.2.6" 7 | resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" 8 | integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== 9 | 10 | "@babel/parser@^7.23.0": 11 | version "7.23.0" 12 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" 13 | integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== 14 | 15 | "@esbuild/android-arm64@0.18.20": 16 | version "0.18.20" 17 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" 18 | integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== 19 | 20 | "@esbuild/android-arm@0.18.20": 21 | version "0.18.20" 22 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" 23 | integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== 24 | 25 | "@esbuild/android-x64@0.18.20": 26 | version "0.18.20" 27 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" 28 | integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== 29 | 30 | "@esbuild/darwin-arm64@0.18.20": 31 | version "0.18.20" 32 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" 33 | integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== 34 | 35 | "@esbuild/darwin-x64@0.18.20": 36 | version "0.18.20" 37 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" 38 | integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== 39 | 40 | "@esbuild/freebsd-arm64@0.18.20": 41 | version "0.18.20" 42 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" 43 | integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== 44 | 45 | "@esbuild/freebsd-x64@0.18.20": 46 | version "0.18.20" 47 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" 48 | integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== 49 | 50 | "@esbuild/linux-arm64@0.18.20": 51 | version "0.18.20" 52 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" 53 | integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== 54 | 55 | "@esbuild/linux-arm@0.18.20": 56 | version "0.18.20" 57 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" 58 | integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== 59 | 60 | "@esbuild/linux-ia32@0.18.20": 61 | version "0.18.20" 62 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" 63 | integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== 64 | 65 | "@esbuild/linux-loong64@0.18.20": 66 | version "0.18.20" 67 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" 68 | integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== 69 | 70 | "@esbuild/linux-mips64el@0.18.20": 71 | version "0.18.20" 72 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" 73 | integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== 74 | 75 | "@esbuild/linux-ppc64@0.18.20": 76 | version "0.18.20" 77 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" 78 | integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== 79 | 80 | "@esbuild/linux-riscv64@0.18.20": 81 | version "0.18.20" 82 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" 83 | integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== 84 | 85 | "@esbuild/linux-s390x@0.18.20": 86 | version "0.18.20" 87 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" 88 | integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== 89 | 90 | "@esbuild/linux-x64@0.18.20": 91 | version "0.18.20" 92 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" 93 | integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== 94 | 95 | "@esbuild/netbsd-x64@0.18.20": 96 | version "0.18.20" 97 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" 98 | integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== 99 | 100 | "@esbuild/openbsd-x64@0.18.20": 101 | version "0.18.20" 102 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" 103 | integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== 104 | 105 | "@esbuild/sunos-x64@0.18.20": 106 | version "0.18.20" 107 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" 108 | integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== 109 | 110 | "@esbuild/win32-arm64@0.18.20": 111 | version "0.18.20" 112 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" 113 | integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== 114 | 115 | "@esbuild/win32-ia32@0.18.20": 116 | version "0.18.20" 117 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" 118 | integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== 119 | 120 | "@esbuild/win32-x64@0.18.20": 121 | version "0.18.20" 122 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" 123 | integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== 124 | 125 | "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": 126 | version "4.4.0" 127 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" 128 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 129 | dependencies: 130 | eslint-visitor-keys "^3.3.0" 131 | 132 | "@eslint-community/regexpp@^4.6.1": 133 | version "4.10.0" 134 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" 135 | integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== 136 | 137 | "@eslint/eslintrc@^2.1.2": 138 | version "2.1.2" 139 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" 140 | integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== 141 | dependencies: 142 | ajv "^6.12.4" 143 | debug "^4.3.2" 144 | espree "^9.6.0" 145 | globals "^13.19.0" 146 | ignore "^5.2.0" 147 | import-fresh "^3.2.1" 148 | js-yaml "^4.1.0" 149 | minimatch "^3.1.2" 150 | strip-json-comments "^3.1.1" 151 | 152 | "@eslint/js@8.52.0": 153 | version "8.52.0" 154 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.52.0.tgz#78fe5f117840f69dc4a353adf9b9cd926353378c" 155 | integrity sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA== 156 | 157 | "@humanwhocodes/config-array@^0.11.13": 158 | version "0.11.13" 159 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" 160 | integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== 161 | dependencies: 162 | "@humanwhocodes/object-schema" "^2.0.1" 163 | debug "^4.1.1" 164 | minimatch "^3.0.5" 165 | 166 | "@humanwhocodes/module-importer@^1.0.1": 167 | version "1.0.1" 168 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 169 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 170 | 171 | "@humanwhocodes/object-schema@^2.0.1": 172 | version "2.0.1" 173 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" 174 | integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== 175 | 176 | "@jridgewell/sourcemap-codec@^1.4.15": 177 | version "1.4.15" 178 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" 179 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 180 | 181 | "@mdi/font@^7.3.67": 182 | version "7.3.67" 183 | resolved "https://registry.yarnpkg.com/@mdi/font/-/font-7.3.67.tgz#faa344a04c9d02f608c891a01134084febeb42db" 184 | integrity sha512-SWxvzRbUQRfewlIV+OF4/YF4DkeTjMWoT8Hh9yeU/5UBVdJZj9Uf4a9+cXjknSIhIaMxZ/4N1O/s7ojApOOGjg== 185 | 186 | "@nodelib/fs.scandir@2.1.5": 187 | version "2.1.5" 188 | resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" 189 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 190 | dependencies: 191 | "@nodelib/fs.stat" "2.0.5" 192 | run-parallel "^1.1.9" 193 | 194 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 195 | version "2.0.5" 196 | resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" 197 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 198 | 199 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": 200 | version "1.2.8" 201 | resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" 202 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 203 | dependencies: 204 | "@nodelib/fs.scandir" "2.1.5" 205 | fastq "^1.6.0" 206 | 207 | "@pkgr/utils@^2.3.1": 208 | version "2.4.2" 209 | resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc" 210 | integrity sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw== 211 | dependencies: 212 | cross-spawn "^7.0.3" 213 | fast-glob "^3.3.0" 214 | is-glob "^4.0.3" 215 | open "^9.1.0" 216 | picocolors "^1.0.0" 217 | tslib "^2.6.0" 218 | 219 | "@popperjs/core@^2.11.6": 220 | version "2.11.6" 221 | resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz" 222 | integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw== 223 | 224 | "@rushstack/eslint-patch@^1.1.4": 225 | version "1.1.4" 226 | resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz" 227 | integrity sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA== 228 | 229 | "@ungap/structured-clone@^1.2.0": 230 | version "1.2.0" 231 | resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" 232 | integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== 233 | 234 | "@vitejs/plugin-vue@^4.4.0": 235 | version "4.4.0" 236 | resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-4.4.0.tgz#8ae96573236cdb12de6850a6d929b5537ec85390" 237 | integrity sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg== 238 | 239 | "@vue/compiler-core@3.3.8": 240 | version "3.3.8" 241 | resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.3.8.tgz#301bb60d0245265a88ed5b30e200fbf223acb313" 242 | integrity sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g== 243 | dependencies: 244 | "@babel/parser" "^7.23.0" 245 | "@vue/shared" "3.3.8" 246 | estree-walker "^2.0.2" 247 | source-map-js "^1.0.2" 248 | 249 | "@vue/compiler-dom@3.3.8": 250 | version "3.3.8" 251 | resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.8.tgz#09d832514b9b8d9415a3816b065d69dbefcc7e9b" 252 | integrity sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ== 253 | dependencies: 254 | "@vue/compiler-core" "3.3.8" 255 | "@vue/shared" "3.3.8" 256 | 257 | "@vue/compiler-sfc@3.3.8": 258 | version "3.3.8" 259 | resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.8.tgz#40b18e48aa00260950964d1d72157668521be0e1" 260 | integrity sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA== 261 | dependencies: 262 | "@babel/parser" "^7.23.0" 263 | "@vue/compiler-core" "3.3.8" 264 | "@vue/compiler-dom" "3.3.8" 265 | "@vue/compiler-ssr" "3.3.8" 266 | "@vue/reactivity-transform" "3.3.8" 267 | "@vue/shared" "3.3.8" 268 | estree-walker "^2.0.2" 269 | magic-string "^0.30.5" 270 | postcss "^8.4.31" 271 | source-map-js "^1.0.2" 272 | 273 | "@vue/compiler-ssr@3.3.8": 274 | version "3.3.8" 275 | resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.8.tgz#136eed54411e4694815d961048a237191063fbce" 276 | integrity sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w== 277 | dependencies: 278 | "@vue/compiler-dom" "3.3.8" 279 | "@vue/shared" "3.3.8" 280 | 281 | "@vue/eslint-config-prettier@^8.0.0": 282 | version "8.0.0" 283 | resolved "https://registry.yarnpkg.com/@vue/eslint-config-prettier/-/eslint-config-prettier-8.0.0.tgz#de5cb77ed483b43683d17a788808a0fa4e7bd07e" 284 | integrity sha512-55dPqtC4PM/yBjhAr+yEw6+7KzzdkBuLmnhBrDfp4I48+wy+Giqqj9yUr5T2uD/BkBROjjmqnLZmXRdOx/VtQg== 285 | dependencies: 286 | eslint-config-prettier "^8.8.0" 287 | eslint-plugin-prettier "^5.0.0" 288 | 289 | "@vue/reactivity-transform@3.3.8": 290 | version "3.3.8" 291 | resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.8.tgz#6d07649013b0be5c670f0ab6cc7ddd3150ad03f2" 292 | integrity sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw== 293 | dependencies: 294 | "@babel/parser" "^7.23.0" 295 | "@vue/compiler-core" "3.3.8" 296 | "@vue/shared" "3.3.8" 297 | estree-walker "^2.0.2" 298 | magic-string "^0.30.5" 299 | 300 | "@vue/reactivity@3.3.8": 301 | version "3.3.8" 302 | resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.3.8.tgz#cce8a03a3fd3539c3eeda53e277ba365d160dd4d" 303 | integrity sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw== 304 | dependencies: 305 | "@vue/shared" "3.3.8" 306 | 307 | "@vue/runtime-core@3.3.8": 308 | version "3.3.8" 309 | resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.3.8.tgz#fba5a632cbf2b5d29e171489570149cb6975dcdb" 310 | integrity sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw== 311 | dependencies: 312 | "@vue/reactivity" "3.3.8" 313 | "@vue/shared" "3.3.8" 314 | 315 | "@vue/runtime-dom@3.3.8": 316 | version "3.3.8" 317 | resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.3.8.tgz#e2d7aa795cf50914dda9a951887765a594b38af4" 318 | integrity sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA== 319 | dependencies: 320 | "@vue/runtime-core" "3.3.8" 321 | "@vue/shared" "3.3.8" 322 | csstype "^3.1.2" 323 | 324 | "@vue/server-renderer@3.3.8": 325 | version "3.3.8" 326 | resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.3.8.tgz#9b1779010e75783edeed8fcfb97d9c95fc3ac5d2" 327 | integrity sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg== 328 | dependencies: 329 | "@vue/compiler-ssr" "3.3.8" 330 | "@vue/shared" "3.3.8" 331 | 332 | "@vue/shared@3.3.8": 333 | version "3.3.8" 334 | resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.8.tgz#f044942142e1d3a395f24132e6203a784838542d" 335 | integrity sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw== 336 | 337 | "@vuelidate/core@^2.0.3": 338 | version "2.0.3" 339 | resolved "https://registry.yarnpkg.com/@vuelidate/core/-/core-2.0.3.tgz#40468c5ed15b72bde880a026b0699c2f0f1ecede" 340 | integrity sha512-AN6l7KF7+mEfyWG0doT96z+47ljwPpZfi9/JrNMkOGLFv27XVZvKzRLXlmDPQjPl/wOB1GNnHuc54jlCLRNqGA== 341 | dependencies: 342 | vue-demi "^0.13.11" 343 | 344 | "@vuelidate/validators@^2.0.4": 345 | version "2.0.4" 346 | resolved "https://registry.yarnpkg.com/@vuelidate/validators/-/validators-2.0.4.tgz#0a88a7b2b18f15fd9c384095593f369a6f7384e9" 347 | integrity sha512-odTxtUZ2JpwwiQ10t0QWYJkkYrfd0SyFYhdHH44QQ1jDatlZgTh/KRzrWVmn/ib9Gq7H4hFD4e8ahoo5YlUlDw== 348 | dependencies: 349 | vue-demi "^0.13.11" 350 | 351 | acorn-jsx@^5.3.2: 352 | version "5.3.2" 353 | resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" 354 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 355 | 356 | acorn@^8.8.0: 357 | version "8.8.0" 358 | resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" 359 | integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== 360 | 361 | acorn@^8.9.0: 362 | version "8.11.2" 363 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" 364 | integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== 365 | 366 | ajv@^6.12.4: 367 | version "6.12.6" 368 | resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" 369 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 370 | dependencies: 371 | fast-deep-equal "^3.1.1" 372 | fast-json-stable-stringify "^2.0.0" 373 | json-schema-traverse "^0.4.1" 374 | uri-js "^4.2.2" 375 | 376 | ansi-regex@^5.0.1: 377 | version "5.0.1" 378 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 379 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 380 | 381 | ansi-styles@^4.1.0: 382 | version "4.3.0" 383 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 384 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 385 | dependencies: 386 | color-convert "^2.0.1" 387 | 388 | argparse@^2.0.1: 389 | version "2.0.1" 390 | resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" 391 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 392 | 393 | available-typed-arrays@^1.0.5: 394 | version "1.0.5" 395 | resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" 396 | integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== 397 | 398 | balanced-match@^1.0.0: 399 | version "1.0.2" 400 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" 401 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 402 | 403 | big-integer@^1.6.44: 404 | version "1.6.51" 405 | resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" 406 | integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== 407 | 408 | boolbase@^1.0.0: 409 | version "1.0.0" 410 | resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" 411 | integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== 412 | 413 | bootstrap-icons@^1.11.1: 414 | version "1.11.1" 415 | resolved "https://registry.yarnpkg.com/bootstrap-icons/-/bootstrap-icons-1.11.1.tgz#79e32494871d8c98e9d14f4bcdc278cee9b1dafd" 416 | integrity sha512-F0DDp7nKUX+x/QtpfRZ+XHFya60ng9nfdpdS59vDDfs4Uhuxp7zym/QavMsu/xx51txkoM9eVmpE7D08N35blw== 417 | 418 | bootstrap@^5.3.2: 419 | version "5.3.2" 420 | resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.2.tgz#97226583f27aae93b2b28ab23f4c114757ff16ae" 421 | integrity sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g== 422 | 423 | bplist-parser@^0.2.0: 424 | version "0.2.0" 425 | resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" 426 | integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== 427 | dependencies: 428 | big-integer "^1.6.44" 429 | 430 | brace-expansion@^1.1.7: 431 | version "1.1.11" 432 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" 433 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 434 | dependencies: 435 | balanced-match "^1.0.0" 436 | concat-map "0.0.1" 437 | 438 | braces@^3.0.2: 439 | version "3.0.2" 440 | resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" 441 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 442 | dependencies: 443 | fill-range "^7.0.1" 444 | 445 | bundle-name@^3.0.0: 446 | version "3.0.0" 447 | resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a" 448 | integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw== 449 | dependencies: 450 | run-applescript "^5.0.0" 451 | 452 | call-bind@^1.0.0, call-bind@^1.0.2: 453 | version "1.0.2" 454 | resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" 455 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 456 | dependencies: 457 | function-bind "^1.1.1" 458 | get-intrinsic "^1.0.2" 459 | 460 | callsites@^3.0.0: 461 | version "3.1.0" 462 | resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" 463 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 464 | 465 | chalk@^4.0.0: 466 | version "4.1.2" 467 | resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 468 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 469 | dependencies: 470 | ansi-styles "^4.1.0" 471 | supports-color "^7.1.0" 472 | 473 | color-convert@^2.0.1: 474 | version "2.0.1" 475 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 476 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 477 | dependencies: 478 | color-name "~1.1.4" 479 | 480 | color-name@~1.1.4: 481 | version "1.1.4" 482 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 483 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 484 | 485 | concat-map@0.0.1: 486 | version "0.0.1" 487 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 488 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 489 | 490 | cross-spawn@^7.0.2, cross-spawn@^7.0.3: 491 | version "7.0.3" 492 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 493 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 494 | dependencies: 495 | path-key "^3.1.0" 496 | shebang-command "^2.0.0" 497 | which "^2.0.1" 498 | 499 | cssesc@^3.0.0: 500 | version "3.0.0" 501 | resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" 502 | integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== 503 | 504 | csstype@^3.1.2: 505 | version "3.1.2" 506 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" 507 | integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== 508 | 509 | debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: 510 | version "4.3.4" 511 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" 512 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 513 | dependencies: 514 | ms "2.1.2" 515 | 516 | deep-is@^0.1.3: 517 | version "0.1.4" 518 | resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" 519 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 520 | 521 | default-browser-id@^3.0.0: 522 | version "3.0.0" 523 | resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c" 524 | integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA== 525 | dependencies: 526 | bplist-parser "^0.2.0" 527 | untildify "^4.0.0" 528 | 529 | default-browser@^4.0.0: 530 | version "4.0.0" 531 | resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da" 532 | integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA== 533 | dependencies: 534 | bundle-name "^3.0.0" 535 | default-browser-id "^3.0.0" 536 | execa "^7.1.1" 537 | titleize "^3.0.0" 538 | 539 | define-lazy-prop@^3.0.0: 540 | version "3.0.0" 541 | resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" 542 | integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== 543 | 544 | define-properties@^1.1.3, define-properties@^1.1.4: 545 | version "1.1.4" 546 | resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" 547 | integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== 548 | dependencies: 549 | has-property-descriptors "^1.0.0" 550 | object-keys "^1.1.1" 551 | 552 | doctrine@^3.0.0: 553 | version "3.0.0" 554 | resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" 555 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 556 | dependencies: 557 | esutils "^2.0.2" 558 | 559 | es-abstract@^1.19.0, es-abstract@^1.19.5, es-abstract@^1.20.0: 560 | version "1.20.1" 561 | resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz" 562 | integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== 563 | dependencies: 564 | call-bind "^1.0.2" 565 | es-to-primitive "^1.2.1" 566 | function-bind "^1.1.1" 567 | function.prototype.name "^1.1.5" 568 | get-intrinsic "^1.1.1" 569 | get-symbol-description "^1.0.0" 570 | has "^1.0.3" 571 | has-property-descriptors "^1.0.0" 572 | has-symbols "^1.0.3" 573 | internal-slot "^1.0.3" 574 | is-callable "^1.2.4" 575 | is-negative-zero "^2.0.2" 576 | is-regex "^1.1.4" 577 | is-shared-array-buffer "^1.0.2" 578 | is-string "^1.0.7" 579 | is-weakref "^1.0.2" 580 | object-inspect "^1.12.0" 581 | object-keys "^1.1.1" 582 | object.assign "^4.1.2" 583 | regexp.prototype.flags "^1.4.3" 584 | string.prototype.trimend "^1.0.5" 585 | string.prototype.trimstart "^1.0.5" 586 | unbox-primitive "^1.0.2" 587 | 588 | es-to-primitive@^1.2.1: 589 | version "1.2.1" 590 | resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" 591 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 592 | dependencies: 593 | is-callable "^1.1.4" 594 | is-date-object "^1.0.1" 595 | is-symbol "^1.0.2" 596 | 597 | esbuild@^0.18.10: 598 | version "0.18.20" 599 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" 600 | integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== 601 | optionalDependencies: 602 | "@esbuild/android-arm" "0.18.20" 603 | "@esbuild/android-arm64" "0.18.20" 604 | "@esbuild/android-x64" "0.18.20" 605 | "@esbuild/darwin-arm64" "0.18.20" 606 | "@esbuild/darwin-x64" "0.18.20" 607 | "@esbuild/freebsd-arm64" "0.18.20" 608 | "@esbuild/freebsd-x64" "0.18.20" 609 | "@esbuild/linux-arm" "0.18.20" 610 | "@esbuild/linux-arm64" "0.18.20" 611 | "@esbuild/linux-ia32" "0.18.20" 612 | "@esbuild/linux-loong64" "0.18.20" 613 | "@esbuild/linux-mips64el" "0.18.20" 614 | "@esbuild/linux-ppc64" "0.18.20" 615 | "@esbuild/linux-riscv64" "0.18.20" 616 | "@esbuild/linux-s390x" "0.18.20" 617 | "@esbuild/linux-x64" "0.18.20" 618 | "@esbuild/netbsd-x64" "0.18.20" 619 | "@esbuild/openbsd-x64" "0.18.20" 620 | "@esbuild/sunos-x64" "0.18.20" 621 | "@esbuild/win32-arm64" "0.18.20" 622 | "@esbuild/win32-ia32" "0.18.20" 623 | "@esbuild/win32-x64" "0.18.20" 624 | 625 | escape-string-regexp@^4.0.0: 626 | version "4.0.0" 627 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" 628 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 629 | 630 | eslint-config-prettier@^8.8.0: 631 | version "8.10.0" 632 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" 633 | integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== 634 | 635 | eslint-plugin-prettier@^5.0.0: 636 | version "5.0.1" 637 | resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz#a3b399f04378f79f066379f544e42d6b73f11515" 638 | integrity sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg== 639 | dependencies: 640 | prettier-linter-helpers "^1.0.0" 641 | synckit "^0.8.5" 642 | 643 | eslint-plugin-vue@^9.18.1: 644 | version "9.18.1" 645 | resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.18.1.tgz#73cf29df7450ce5913296465f8d1dc545344920c" 646 | integrity sha512-7hZFlrEgg9NIzuVik2I9xSnJA5RsmOfueYgsUGUokEDLJ1LHtxO0Pl4duje1BriZ/jDWb+44tcIlC3yi0tdlZg== 647 | dependencies: 648 | "@eslint-community/eslint-utils" "^4.4.0" 649 | natural-compare "^1.4.0" 650 | nth-check "^2.1.1" 651 | postcss-selector-parser "^6.0.13" 652 | semver "^7.5.4" 653 | vue-eslint-parser "^9.3.1" 654 | xml-name-validator "^4.0.0" 655 | 656 | eslint-scope@^7.1.1: 657 | version "7.1.1" 658 | resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" 659 | integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== 660 | dependencies: 661 | esrecurse "^4.3.0" 662 | estraverse "^5.2.0" 663 | 664 | eslint-scope@^7.2.2: 665 | version "7.2.2" 666 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" 667 | integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== 668 | dependencies: 669 | esrecurse "^4.3.0" 670 | estraverse "^5.2.0" 671 | 672 | eslint-visitor-keys@^3.3.0: 673 | version "3.3.0" 674 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" 675 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== 676 | 677 | eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: 678 | version "3.4.3" 679 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" 680 | integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== 681 | 682 | eslint@^8.52.0: 683 | version "8.52.0" 684 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.52.0.tgz#d0cd4a1fac06427a61ef9242b9353f36ea7062fc" 685 | integrity sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg== 686 | dependencies: 687 | "@eslint-community/eslint-utils" "^4.2.0" 688 | "@eslint-community/regexpp" "^4.6.1" 689 | "@eslint/eslintrc" "^2.1.2" 690 | "@eslint/js" "8.52.0" 691 | "@humanwhocodes/config-array" "^0.11.13" 692 | "@humanwhocodes/module-importer" "^1.0.1" 693 | "@nodelib/fs.walk" "^1.2.8" 694 | "@ungap/structured-clone" "^1.2.0" 695 | ajv "^6.12.4" 696 | chalk "^4.0.0" 697 | cross-spawn "^7.0.2" 698 | debug "^4.3.2" 699 | doctrine "^3.0.0" 700 | escape-string-regexp "^4.0.0" 701 | eslint-scope "^7.2.2" 702 | eslint-visitor-keys "^3.4.3" 703 | espree "^9.6.1" 704 | esquery "^1.4.2" 705 | esutils "^2.0.2" 706 | fast-deep-equal "^3.1.3" 707 | file-entry-cache "^6.0.1" 708 | find-up "^5.0.0" 709 | glob-parent "^6.0.2" 710 | globals "^13.19.0" 711 | graphemer "^1.4.0" 712 | ignore "^5.2.0" 713 | imurmurhash "^0.1.4" 714 | is-glob "^4.0.0" 715 | is-path-inside "^3.0.3" 716 | js-yaml "^4.1.0" 717 | json-stable-stringify-without-jsonify "^1.0.1" 718 | levn "^0.4.1" 719 | lodash.merge "^4.6.2" 720 | minimatch "^3.1.2" 721 | natural-compare "^1.4.0" 722 | optionator "^0.9.3" 723 | strip-ansi "^6.0.1" 724 | text-table "^0.2.0" 725 | 726 | espree@^9.3.1: 727 | version "9.3.3" 728 | resolved "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz" 729 | integrity sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng== 730 | dependencies: 731 | acorn "^8.8.0" 732 | acorn-jsx "^5.3.2" 733 | eslint-visitor-keys "^3.3.0" 734 | 735 | espree@^9.6.0, espree@^9.6.1: 736 | version "9.6.1" 737 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" 738 | integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== 739 | dependencies: 740 | acorn "^8.9.0" 741 | acorn-jsx "^5.3.2" 742 | eslint-visitor-keys "^3.4.1" 743 | 744 | esquery@^1.4.0: 745 | version "1.4.0" 746 | resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" 747 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 748 | dependencies: 749 | estraverse "^5.1.0" 750 | 751 | esquery@^1.4.2: 752 | version "1.5.0" 753 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" 754 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== 755 | dependencies: 756 | estraverse "^5.1.0" 757 | 758 | esrecurse@^4.3.0: 759 | version "4.3.0" 760 | resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" 761 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 762 | dependencies: 763 | estraverse "^5.2.0" 764 | 765 | estraverse@^5.1.0, estraverse@^5.2.0: 766 | version "5.3.0" 767 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" 768 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 769 | 770 | estree-walker@^2.0.2: 771 | version "2.0.2" 772 | resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" 773 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== 774 | 775 | esutils@^2.0.2: 776 | version "2.0.3" 777 | resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" 778 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 779 | 780 | events@^3.3.0: 781 | version "3.3.0" 782 | resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" 783 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== 784 | 785 | execa@^5.0.0: 786 | version "5.1.1" 787 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" 788 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 789 | dependencies: 790 | cross-spawn "^7.0.3" 791 | get-stream "^6.0.0" 792 | human-signals "^2.1.0" 793 | is-stream "^2.0.0" 794 | merge-stream "^2.0.0" 795 | npm-run-path "^4.0.1" 796 | onetime "^5.1.2" 797 | signal-exit "^3.0.3" 798 | strip-final-newline "^2.0.0" 799 | 800 | execa@^7.1.1: 801 | version "7.2.0" 802 | resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" 803 | integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== 804 | dependencies: 805 | cross-spawn "^7.0.3" 806 | get-stream "^6.0.1" 807 | human-signals "^4.3.0" 808 | is-stream "^3.0.0" 809 | merge-stream "^2.0.0" 810 | npm-run-path "^5.1.0" 811 | onetime "^6.0.0" 812 | signal-exit "^3.0.7" 813 | strip-final-newline "^3.0.0" 814 | 815 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 816 | version "3.1.3" 817 | resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" 818 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 819 | 820 | fast-diff@^1.1.2: 821 | version "1.2.0" 822 | resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" 823 | integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== 824 | 825 | fast-glob@^3.3.0: 826 | version "3.3.1" 827 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" 828 | integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== 829 | dependencies: 830 | "@nodelib/fs.stat" "^2.0.2" 831 | "@nodelib/fs.walk" "^1.2.3" 832 | glob-parent "^5.1.2" 833 | merge2 "^1.3.0" 834 | micromatch "^4.0.4" 835 | 836 | fast-json-stable-stringify@^2.0.0: 837 | version "2.1.0" 838 | resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" 839 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 840 | 841 | fast-levenshtein@^2.0.6: 842 | version "2.0.6" 843 | resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" 844 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 845 | 846 | fastq@^1.6.0: 847 | version "1.13.0" 848 | resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" 849 | integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== 850 | dependencies: 851 | reusify "^1.0.4" 852 | 853 | file-entry-cache@^6.0.1: 854 | version "6.0.1" 855 | resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" 856 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 857 | dependencies: 858 | flat-cache "^3.0.4" 859 | 860 | fill-range@^7.0.1: 861 | version "7.0.1" 862 | resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" 863 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 864 | dependencies: 865 | to-regex-range "^5.0.1" 866 | 867 | find-up@^5.0.0: 868 | version "5.0.0" 869 | resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" 870 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 871 | dependencies: 872 | locate-path "^6.0.0" 873 | path-exists "^4.0.0" 874 | 875 | flat-cache@^3.0.4: 876 | version "3.0.4" 877 | resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" 878 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 879 | dependencies: 880 | flatted "^3.1.0" 881 | rimraf "^3.0.2" 882 | 883 | flatted@^3.1.0: 884 | version "3.2.7" 885 | resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" 886 | integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== 887 | 888 | for-each@^0.3.3: 889 | version "0.3.3" 890 | resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" 891 | integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== 892 | dependencies: 893 | is-callable "^1.1.3" 894 | 895 | fs.realpath@^1.0.0: 896 | version "1.0.0" 897 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" 898 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 899 | 900 | fsevents@~2.3.2: 901 | version "2.3.3" 902 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" 903 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== 904 | 905 | function-bind@^1.1.1: 906 | version "1.1.1" 907 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" 908 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 909 | 910 | function.prototype.name@^1.1.5: 911 | version "1.1.5" 912 | resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" 913 | integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== 914 | dependencies: 915 | call-bind "^1.0.2" 916 | define-properties "^1.1.3" 917 | es-abstract "^1.19.0" 918 | functions-have-names "^1.2.2" 919 | 920 | functions-have-names@^1.2.2: 921 | version "1.2.3" 922 | resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" 923 | integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== 924 | 925 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: 926 | version "1.1.2" 927 | resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz" 928 | integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== 929 | dependencies: 930 | function-bind "^1.1.1" 931 | has "^1.0.3" 932 | has-symbols "^1.0.3" 933 | 934 | get-stream@^6.0.0, get-stream@^6.0.1: 935 | version "6.0.1" 936 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 937 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 938 | 939 | get-symbol-description@^1.0.0: 940 | version "1.0.0" 941 | resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" 942 | integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== 943 | dependencies: 944 | call-bind "^1.0.2" 945 | get-intrinsic "^1.1.1" 946 | 947 | glob-parent@^5.1.2: 948 | version "5.1.2" 949 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" 950 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 951 | dependencies: 952 | is-glob "^4.0.1" 953 | 954 | glob-parent@^6.0.2: 955 | version "6.0.2" 956 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 957 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 958 | dependencies: 959 | is-glob "^4.0.3" 960 | 961 | glob@^7.1.3: 962 | version "7.2.3" 963 | resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" 964 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 965 | dependencies: 966 | fs.realpath "^1.0.0" 967 | inflight "^1.0.4" 968 | inherits "2" 969 | minimatch "^3.1.1" 970 | once "^1.3.0" 971 | path-is-absolute "^1.0.0" 972 | 973 | globals@^13.19.0: 974 | version "13.23.0" 975 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" 976 | integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== 977 | dependencies: 978 | type-fest "^0.20.2" 979 | 980 | graphemer@^1.4.0: 981 | version "1.4.0" 982 | resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" 983 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 984 | 985 | has-bigints@^1.0.1, has-bigints@^1.0.2: 986 | version "1.0.2" 987 | resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" 988 | integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== 989 | 990 | has-flag@^4.0.0: 991 | version "4.0.0" 992 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 993 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 994 | 995 | has-property-descriptors@^1.0.0: 996 | version "1.0.0" 997 | resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" 998 | integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== 999 | dependencies: 1000 | get-intrinsic "^1.1.1" 1001 | 1002 | has-symbols@^1.0.2, has-symbols@^1.0.3: 1003 | version "1.0.3" 1004 | resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" 1005 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 1006 | 1007 | has-tostringtag@^1.0.0: 1008 | version "1.0.0" 1009 | resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" 1010 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== 1011 | dependencies: 1012 | has-symbols "^1.0.2" 1013 | 1014 | has@^1.0.3: 1015 | version "1.0.3" 1016 | resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" 1017 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1018 | dependencies: 1019 | function-bind "^1.1.1" 1020 | 1021 | human-signals@^2.1.0: 1022 | version "2.1.0" 1023 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 1024 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 1025 | 1026 | human-signals@^4.3.0: 1027 | version "4.3.1" 1028 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" 1029 | integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== 1030 | 1031 | ignore@^5.2.0: 1032 | version "5.2.0" 1033 | resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" 1034 | integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== 1035 | 1036 | import-fresh@^3.2.1: 1037 | version "3.3.0" 1038 | resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" 1039 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1040 | dependencies: 1041 | parent-module "^1.0.0" 1042 | resolve-from "^4.0.0" 1043 | 1044 | imurmurhash@^0.1.4: 1045 | version "0.1.4" 1046 | resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" 1047 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1048 | 1049 | inflight@^1.0.4: 1050 | version "1.0.6" 1051 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" 1052 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1053 | dependencies: 1054 | once "^1.3.0" 1055 | wrappy "1" 1056 | 1057 | inherits@2, inherits@^2.0.3: 1058 | version "2.0.4" 1059 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 1060 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1061 | 1062 | internal-slot@^1.0.3: 1063 | version "1.0.3" 1064 | resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" 1065 | integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== 1066 | dependencies: 1067 | get-intrinsic "^1.1.0" 1068 | has "^1.0.3" 1069 | side-channel "^1.0.4" 1070 | 1071 | is-arguments@^1.0.4: 1072 | version "1.1.1" 1073 | resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" 1074 | integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== 1075 | dependencies: 1076 | call-bind "^1.0.2" 1077 | has-tostringtag "^1.0.0" 1078 | 1079 | is-bigint@^1.0.1: 1080 | version "1.0.4" 1081 | resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" 1082 | integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== 1083 | dependencies: 1084 | has-bigints "^1.0.1" 1085 | 1086 | is-boolean-object@^1.1.0: 1087 | version "1.1.2" 1088 | resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" 1089 | integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== 1090 | dependencies: 1091 | call-bind "^1.0.2" 1092 | has-tostringtag "^1.0.0" 1093 | 1094 | is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: 1095 | version "1.2.4" 1096 | resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz" 1097 | integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== 1098 | 1099 | is-date-object@^1.0.1: 1100 | version "1.0.5" 1101 | resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" 1102 | integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== 1103 | dependencies: 1104 | has-tostringtag "^1.0.0" 1105 | 1106 | is-docker@^2.0.0: 1107 | version "2.2.1" 1108 | resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" 1109 | integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== 1110 | 1111 | is-docker@^3.0.0: 1112 | version "3.0.0" 1113 | resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" 1114 | integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== 1115 | 1116 | is-extglob@^2.1.1: 1117 | version "2.1.1" 1118 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" 1119 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1120 | 1121 | is-generator-function@^1.0.7: 1122 | version "1.0.10" 1123 | resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" 1124 | integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== 1125 | dependencies: 1126 | has-tostringtag "^1.0.0" 1127 | 1128 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: 1129 | version "4.0.3" 1130 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 1131 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1132 | dependencies: 1133 | is-extglob "^2.1.1" 1134 | 1135 | is-inside-container@^1.0.0: 1136 | version "1.0.0" 1137 | resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" 1138 | integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== 1139 | dependencies: 1140 | is-docker "^3.0.0" 1141 | 1142 | is-negative-zero@^2.0.2: 1143 | version "2.0.2" 1144 | resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" 1145 | integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== 1146 | 1147 | is-number-object@^1.0.4: 1148 | version "1.0.7" 1149 | resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" 1150 | integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== 1151 | dependencies: 1152 | has-tostringtag "^1.0.0" 1153 | 1154 | is-number@^7.0.0: 1155 | version "7.0.0" 1156 | resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" 1157 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1158 | 1159 | is-path-inside@^3.0.3: 1160 | version "3.0.3" 1161 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 1162 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 1163 | 1164 | is-regex@^1.1.4: 1165 | version "1.1.4" 1166 | resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" 1167 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== 1168 | dependencies: 1169 | call-bind "^1.0.2" 1170 | has-tostringtag "^1.0.0" 1171 | 1172 | is-shared-array-buffer@^1.0.2: 1173 | version "1.0.2" 1174 | resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" 1175 | integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== 1176 | dependencies: 1177 | call-bind "^1.0.2" 1178 | 1179 | is-stream@^2.0.0: 1180 | version "2.0.1" 1181 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" 1182 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== 1183 | 1184 | is-stream@^3.0.0: 1185 | version "3.0.0" 1186 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" 1187 | integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== 1188 | 1189 | is-string@^1.0.5, is-string@^1.0.7: 1190 | version "1.0.7" 1191 | resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" 1192 | integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== 1193 | dependencies: 1194 | has-tostringtag "^1.0.0" 1195 | 1196 | is-symbol@^1.0.2, is-symbol@^1.0.3: 1197 | version "1.0.4" 1198 | resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" 1199 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== 1200 | dependencies: 1201 | has-symbols "^1.0.2" 1202 | 1203 | is-typed-array@^1.1.3, is-typed-array@^1.1.9: 1204 | version "1.1.9" 1205 | resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz" 1206 | integrity sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A== 1207 | dependencies: 1208 | available-typed-arrays "^1.0.5" 1209 | call-bind "^1.0.2" 1210 | es-abstract "^1.20.0" 1211 | for-each "^0.3.3" 1212 | has-tostringtag "^1.0.0" 1213 | 1214 | is-weakref@^1.0.2: 1215 | version "1.0.2" 1216 | resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" 1217 | integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== 1218 | dependencies: 1219 | call-bind "^1.0.2" 1220 | 1221 | is-wsl@^2.2.0: 1222 | version "2.2.0" 1223 | resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" 1224 | integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== 1225 | dependencies: 1226 | is-docker "^2.0.0" 1227 | 1228 | isexe@^2.0.0: 1229 | version "2.0.0" 1230 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" 1231 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1232 | 1233 | js-yaml@^4.1.0: 1234 | version "4.1.0" 1235 | resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" 1236 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1237 | dependencies: 1238 | argparse "^2.0.1" 1239 | 1240 | json-schema-traverse@^0.4.1: 1241 | version "0.4.1" 1242 | resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" 1243 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1244 | 1245 | json-stable-stringify-without-jsonify@^1.0.1: 1246 | version "1.0.1" 1247 | resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" 1248 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 1249 | 1250 | levn@^0.4.1: 1251 | version "0.4.1" 1252 | resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" 1253 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1254 | dependencies: 1255 | prelude-ls "^1.2.1" 1256 | type-check "~0.4.0" 1257 | 1258 | locate-path@^6.0.0: 1259 | version "6.0.0" 1260 | resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" 1261 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1262 | dependencies: 1263 | p-locate "^5.0.0" 1264 | 1265 | lodash.merge@^4.6.2: 1266 | version "4.6.2" 1267 | resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" 1268 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1269 | 1270 | lodash@^4.17.21: 1271 | version "4.17.21" 1272 | resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" 1273 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1274 | 1275 | lru-cache@^6.0.0: 1276 | version "6.0.0" 1277 | resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" 1278 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1279 | dependencies: 1280 | yallist "^4.0.0" 1281 | 1282 | magic-string@^0.30.5: 1283 | version "0.30.5" 1284 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9" 1285 | integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== 1286 | dependencies: 1287 | "@jridgewell/sourcemap-codec" "^1.4.15" 1288 | 1289 | merge-stream@^2.0.0: 1290 | version "2.0.0" 1291 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 1292 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1293 | 1294 | merge2@^1.3.0: 1295 | version "1.4.1" 1296 | resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" 1297 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1298 | 1299 | micromatch@^4.0.4: 1300 | version "4.0.5" 1301 | resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" 1302 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1303 | dependencies: 1304 | braces "^3.0.2" 1305 | picomatch "^2.3.1" 1306 | 1307 | mimic-fn@^2.1.0: 1308 | version "2.1.0" 1309 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 1310 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 1311 | 1312 | mimic-fn@^4.0.0: 1313 | version "4.0.0" 1314 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" 1315 | integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== 1316 | 1317 | minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: 1318 | version "3.1.2" 1319 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" 1320 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1321 | dependencies: 1322 | brace-expansion "^1.1.7" 1323 | 1324 | ms@2.1.2: 1325 | version "2.1.2" 1326 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 1327 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1328 | 1329 | nanoid@^3.3.6: 1330 | version "3.3.6" 1331 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" 1332 | integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== 1333 | 1334 | natural-compare@^1.4.0: 1335 | version "1.4.0" 1336 | resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" 1337 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 1338 | 1339 | npm-run-path@^4.0.1: 1340 | version "4.0.1" 1341 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 1342 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 1343 | dependencies: 1344 | path-key "^3.0.0" 1345 | 1346 | npm-run-path@^5.1.0: 1347 | version "5.1.0" 1348 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" 1349 | integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== 1350 | dependencies: 1351 | path-key "^4.0.0" 1352 | 1353 | nth-check@^2.1.1: 1354 | version "2.1.1" 1355 | resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" 1356 | integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== 1357 | dependencies: 1358 | boolbase "^1.0.0" 1359 | 1360 | object-inspect@^1.12.0, object-inspect@^1.9.0: 1361 | version "1.12.2" 1362 | resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" 1363 | integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== 1364 | 1365 | object-keys@^1.1.1: 1366 | version "1.1.1" 1367 | resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" 1368 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1369 | 1370 | object.assign@^4.1.2: 1371 | version "4.1.4" 1372 | resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" 1373 | integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== 1374 | dependencies: 1375 | call-bind "^1.0.2" 1376 | define-properties "^1.1.4" 1377 | has-symbols "^1.0.3" 1378 | object-keys "^1.1.1" 1379 | 1380 | once@^1.3.0: 1381 | version "1.4.0" 1382 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" 1383 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1384 | dependencies: 1385 | wrappy "1" 1386 | 1387 | onetime@^5.1.2: 1388 | version "5.1.2" 1389 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 1390 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 1391 | dependencies: 1392 | mimic-fn "^2.1.0" 1393 | 1394 | onetime@^6.0.0: 1395 | version "6.0.0" 1396 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" 1397 | integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== 1398 | dependencies: 1399 | mimic-fn "^4.0.0" 1400 | 1401 | open@^9.1.0: 1402 | version "9.1.0" 1403 | resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6" 1404 | integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg== 1405 | dependencies: 1406 | default-browser "^4.0.0" 1407 | define-lazy-prop "^3.0.0" 1408 | is-inside-container "^1.0.0" 1409 | is-wsl "^2.2.0" 1410 | 1411 | optionator@^0.9.3: 1412 | version "0.9.3" 1413 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" 1414 | integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== 1415 | dependencies: 1416 | "@aashutoshrathi/word-wrap" "^1.2.3" 1417 | deep-is "^0.1.3" 1418 | fast-levenshtein "^2.0.6" 1419 | levn "^0.4.1" 1420 | prelude-ls "^1.2.1" 1421 | type-check "^0.4.0" 1422 | 1423 | p-limit@^3.0.2: 1424 | version "3.1.0" 1425 | resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" 1426 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1427 | dependencies: 1428 | yocto-queue "^0.1.0" 1429 | 1430 | p-locate@^5.0.0: 1431 | version "5.0.0" 1432 | resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" 1433 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1434 | dependencies: 1435 | p-limit "^3.0.2" 1436 | 1437 | pako@^2.1.0: 1438 | version "2.1.0" 1439 | resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" 1440 | integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== 1441 | 1442 | parent-module@^1.0.0: 1443 | version "1.0.1" 1444 | resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" 1445 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1446 | dependencies: 1447 | callsites "^3.0.0" 1448 | 1449 | path-exists@^4.0.0: 1450 | version "4.0.0" 1451 | resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" 1452 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1453 | 1454 | path-is-absolute@^1.0.0: 1455 | version "1.0.1" 1456 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" 1457 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1458 | 1459 | path-key@^3.0.0, path-key@^3.1.0: 1460 | version "3.1.1" 1461 | resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" 1462 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1463 | 1464 | path-key@^4.0.0: 1465 | version "4.0.0" 1466 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" 1467 | integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== 1468 | 1469 | picocolors@^1.0.0: 1470 | version "1.0.0" 1471 | resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" 1472 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 1473 | 1474 | picomatch@^2.3.1: 1475 | version "2.3.1" 1476 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" 1477 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1478 | 1479 | postcss-selector-parser@^6.0.13: 1480 | version "6.0.13" 1481 | resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" 1482 | integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== 1483 | dependencies: 1484 | cssesc "^3.0.0" 1485 | util-deprecate "^1.0.2" 1486 | 1487 | postcss@^8.4.27, postcss@^8.4.31: 1488 | version "8.4.31" 1489 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" 1490 | integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== 1491 | dependencies: 1492 | nanoid "^3.3.6" 1493 | picocolors "^1.0.0" 1494 | source-map-js "^1.0.2" 1495 | 1496 | prelude-ls@^1.2.1: 1497 | version "1.2.1" 1498 | resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" 1499 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1500 | 1501 | prettier-linter-helpers@^1.0.0: 1502 | version "1.0.0" 1503 | resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" 1504 | integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== 1505 | dependencies: 1506 | fast-diff "^1.1.2" 1507 | 1508 | prettier@^3.0.3: 1509 | version "3.0.3" 1510 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" 1511 | integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== 1512 | 1513 | punycode@^2.1.0: 1514 | version "2.1.1" 1515 | resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" 1516 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1517 | 1518 | queue-microtask@^1.2.2: 1519 | version "1.2.3" 1520 | resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" 1521 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1522 | 1523 | regexp.prototype.flags@^1.4.3: 1524 | version "1.4.3" 1525 | resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" 1526 | integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== 1527 | dependencies: 1528 | call-bind "^1.0.2" 1529 | define-properties "^1.1.3" 1530 | functions-have-names "^1.2.2" 1531 | 1532 | resolve-from@^4.0.0: 1533 | version "4.0.0" 1534 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" 1535 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1536 | 1537 | reusify@^1.0.4: 1538 | version "1.0.4" 1539 | resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" 1540 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1541 | 1542 | rimraf@^3.0.2: 1543 | version "3.0.2" 1544 | resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" 1545 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1546 | dependencies: 1547 | glob "^7.1.3" 1548 | 1549 | rollup@^3.27.1: 1550 | version "3.29.4" 1551 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981" 1552 | integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== 1553 | optionalDependencies: 1554 | fsevents "~2.3.2" 1555 | 1556 | run-applescript@^5.0.0: 1557 | version "5.0.0" 1558 | resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c" 1559 | integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg== 1560 | dependencies: 1561 | execa "^5.0.0" 1562 | 1563 | run-parallel@^1.1.9: 1564 | version "1.2.0" 1565 | resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" 1566 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1567 | dependencies: 1568 | queue-microtask "^1.2.2" 1569 | 1570 | safe-buffer@^5.1.2: 1571 | version "5.2.1" 1572 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" 1573 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1574 | 1575 | semver@^7.3.6: 1576 | version "7.3.7" 1577 | resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" 1578 | integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== 1579 | dependencies: 1580 | lru-cache "^6.0.0" 1581 | 1582 | semver@^7.5.4: 1583 | version "7.5.4" 1584 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" 1585 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== 1586 | dependencies: 1587 | lru-cache "^6.0.0" 1588 | 1589 | shebang-command@^2.0.0: 1590 | version "2.0.0" 1591 | resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" 1592 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1593 | dependencies: 1594 | shebang-regex "^3.0.0" 1595 | 1596 | shebang-regex@^3.0.0: 1597 | version "3.0.0" 1598 | resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" 1599 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1600 | 1601 | side-channel@^1.0.4: 1602 | version "1.0.4" 1603 | resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" 1604 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 1605 | dependencies: 1606 | call-bind "^1.0.0" 1607 | get-intrinsic "^1.0.2" 1608 | object-inspect "^1.9.0" 1609 | 1610 | signal-exit@^3.0.3, signal-exit@^3.0.7: 1611 | version "3.0.7" 1612 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 1613 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 1614 | 1615 | source-map-js@^1.0.2: 1616 | version "1.0.2" 1617 | resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" 1618 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 1619 | 1620 | string.prototype.trimend@^1.0.5: 1621 | version "1.0.5" 1622 | resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" 1623 | integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== 1624 | dependencies: 1625 | call-bind "^1.0.2" 1626 | define-properties "^1.1.4" 1627 | es-abstract "^1.19.5" 1628 | 1629 | string.prototype.trimstart@^1.0.5: 1630 | version "1.0.5" 1631 | resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" 1632 | integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== 1633 | dependencies: 1634 | call-bind "^1.0.2" 1635 | define-properties "^1.1.4" 1636 | es-abstract "^1.19.5" 1637 | 1638 | strip-ansi@^6.0.1: 1639 | version "6.0.1" 1640 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 1641 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1642 | dependencies: 1643 | ansi-regex "^5.0.1" 1644 | 1645 | strip-final-newline@^2.0.0: 1646 | version "2.0.0" 1647 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 1648 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 1649 | 1650 | strip-final-newline@^3.0.0: 1651 | version "3.0.0" 1652 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" 1653 | integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== 1654 | 1655 | strip-json-comments@^3.1.1: 1656 | version "3.1.1" 1657 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" 1658 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1659 | 1660 | supports-color@^7.1.0: 1661 | version "7.2.0" 1662 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 1663 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1664 | dependencies: 1665 | has-flag "^4.0.0" 1666 | 1667 | synckit@^0.8.5: 1668 | version "0.8.5" 1669 | resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" 1670 | integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== 1671 | dependencies: 1672 | "@pkgr/utils" "^2.3.1" 1673 | tslib "^2.5.0" 1674 | 1675 | text-table@^0.2.0: 1676 | version "0.2.0" 1677 | resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" 1678 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 1679 | 1680 | titleize@^3.0.0: 1681 | version "3.0.0" 1682 | resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" 1683 | integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== 1684 | 1685 | to-regex-range@^5.0.1: 1686 | version "5.0.1" 1687 | resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" 1688 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1689 | dependencies: 1690 | is-number "^7.0.0" 1691 | 1692 | tslib@^2.5.0, tslib@^2.6.0: 1693 | version "2.6.2" 1694 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" 1695 | integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== 1696 | 1697 | type-check@^0.4.0, type-check@~0.4.0: 1698 | version "0.4.0" 1699 | resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" 1700 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1701 | dependencies: 1702 | prelude-ls "^1.2.1" 1703 | 1704 | type-fest@^0.20.2: 1705 | version "0.20.2" 1706 | resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" 1707 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1708 | 1709 | unbox-primitive@^1.0.2: 1710 | version "1.0.2" 1711 | resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" 1712 | integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== 1713 | dependencies: 1714 | call-bind "^1.0.2" 1715 | has-bigints "^1.0.2" 1716 | has-symbols "^1.0.3" 1717 | which-boxed-primitive "^1.0.2" 1718 | 1719 | untildify@^4.0.0: 1720 | version "4.0.0" 1721 | resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" 1722 | integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== 1723 | 1724 | uri-js@^4.2.2: 1725 | version "4.4.1" 1726 | resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" 1727 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1728 | dependencies: 1729 | punycode "^2.1.0" 1730 | 1731 | util-deprecate@^1.0.2: 1732 | version "1.0.2" 1733 | resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" 1734 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 1735 | 1736 | util@^0.12.4: 1737 | version "0.12.4" 1738 | resolved "https://registry.npmjs.org/util/-/util-0.12.4.tgz" 1739 | integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== 1740 | dependencies: 1741 | inherits "^2.0.3" 1742 | is-arguments "^1.0.4" 1743 | is-generator-function "^1.0.7" 1744 | is-typed-array "^1.1.3" 1745 | safe-buffer "^5.1.2" 1746 | which-typed-array "^1.1.2" 1747 | 1748 | vite-plugin-package-version@^1.0.2: 1749 | version "1.0.2" 1750 | resolved "https://registry.npmjs.org/vite-plugin-package-version/-/vite-plugin-package-version-1.0.2.tgz" 1751 | integrity sha512-xCJMR0KD4rqSUwINyHJlLizio2VzYzaMrRkqC9xWaVGXgw1lIrzdD+wBUf1XDM8EhL1JoQ7aykLOfKrlZd1SoQ== 1752 | 1753 | vite@^4.5.0: 1754 | version "4.5.0" 1755 | resolved "https://registry.yarnpkg.com/vite/-/vite-4.5.0.tgz#ec406295b4167ac3bc23e26f9c8ff559287cff26" 1756 | integrity sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw== 1757 | dependencies: 1758 | esbuild "^0.18.10" 1759 | postcss "^8.4.27" 1760 | rollup "^3.27.1" 1761 | optionalDependencies: 1762 | fsevents "~2.3.2" 1763 | 1764 | vue-demi@^0.13.11: 1765 | version "0.13.11" 1766 | resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.13.11.tgz#7d90369bdae8974d87b1973564ad390182410d99" 1767 | integrity sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A== 1768 | 1769 | vue-eslint-parser@^9.3.1: 1770 | version "9.3.2" 1771 | resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz#6f9638e55703f1c77875a19026347548d93fd499" 1772 | integrity sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg== 1773 | dependencies: 1774 | debug "^4.3.4" 1775 | eslint-scope "^7.1.1" 1776 | eslint-visitor-keys "^3.3.0" 1777 | espree "^9.3.1" 1778 | esquery "^1.4.0" 1779 | lodash "^4.17.21" 1780 | semver "^7.3.6" 1781 | 1782 | vue@^3.3.8: 1783 | version "3.3.8" 1784 | resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.8.tgz#532ff071af24f6a69e5ecc53a66858a9ee874ffc" 1785 | integrity sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w== 1786 | dependencies: 1787 | "@vue/compiler-dom" "3.3.8" 1788 | "@vue/compiler-sfc" "3.3.8" 1789 | "@vue/runtime-dom" "3.3.8" 1790 | "@vue/server-renderer" "3.3.8" 1791 | "@vue/shared" "3.3.8" 1792 | 1793 | vuetify@^3.3.23: 1794 | version "3.3.23" 1795 | resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-3.3.23.tgz#b456ac20ea945fa746f2a056f8157e38ee2756e6" 1796 | integrity sha512-EVEFvDyKr/HK2+hQJyhQSjIDULDaBi9vfgAAB0ekm+2Tvc8AkaDwb7VK44R2eilGFGpju6iN52FV7Uasj8SmIg== 1797 | 1798 | which-boxed-primitive@^1.0.2: 1799 | version "1.0.2" 1800 | resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" 1801 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== 1802 | dependencies: 1803 | is-bigint "^1.0.1" 1804 | is-boolean-object "^1.1.0" 1805 | is-number-object "^1.0.4" 1806 | is-string "^1.0.5" 1807 | is-symbol "^1.0.3" 1808 | 1809 | which-typed-array@^1.1.2: 1810 | version "1.1.8" 1811 | resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz" 1812 | integrity sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw== 1813 | dependencies: 1814 | available-typed-arrays "^1.0.5" 1815 | call-bind "^1.0.2" 1816 | es-abstract "^1.20.0" 1817 | for-each "^0.3.3" 1818 | has-tostringtag "^1.0.0" 1819 | is-typed-array "^1.1.9" 1820 | 1821 | which@^2.0.1: 1822 | version "2.0.2" 1823 | resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" 1824 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1825 | dependencies: 1826 | isexe "^2.0.0" 1827 | 1828 | wrappy@1: 1829 | version "1.0.2" 1830 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" 1831 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1832 | 1833 | xml-name-validator@^4.0.0: 1834 | version "4.0.0" 1835 | resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz" 1836 | integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== 1837 | 1838 | yallist@^4.0.0: 1839 | version "4.0.0" 1840 | resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" 1841 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1842 | 1843 | yocto-queue@^0.1.0: 1844 | version "0.1.0" 1845 | resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" 1846 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1847 | --------------------------------------------------------------------------------