diff --git a/pom.xml b/pom.xml index 5a81ce03f..0769e4d30 100644 --- a/pom.xml +++ b/pom.xml @@ -56,6 +56,7 @@ https://github.com/alibaba/arthas + web-ui math-game common spy diff --git a/web-ui/arthasWebConsole/.gitignore b/web-ui/arthasWebConsole/.gitignore new file mode 100644 index 000000000..554f2a65c --- /dev/null +++ b/web-ui/arthasWebConsole/.gitignore @@ -0,0 +1,25 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +.husky/* \ No newline at end of file diff --git a/web-ui/arthasWebConsole/.vscode/extensions.json b/web-ui/arthasWebConsole/.vscode/extensions.json new file mode 100644 index 000000000..89fa5cd1e --- /dev/null +++ b/web-ui/arthasWebConsole/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar","statelyai.stately-vscode"] +} diff --git a/web-ui/arthasWebConsole/README.md b/web-ui/arthasWebConsole/README.md new file mode 100644 index 000000000..3f9e258cc --- /dev/null +++ b/web-ui/arthasWebConsole/README.md @@ -0,0 +1,22 @@ +# a Web client based on HTTP API for arthas + +## usage + +* Through clicking the button in the top right corner, you can quickly get or clear sessionId +* When you are in trouble, refreshing the page is a good way +* Some features must be used with sessionId. but some features must be used without sessionId +* In classloader module, you must selecte a classloader before using classloader to load class or resourse + +## develop + +* Strongly recommand devloping with vscode +* TS + Vue3 + Tailwindcss + xstate +* You can view the Graphical http requesting process with xstate +* The final bundle will be placed in `../target/static` + + +### notice + +* When use pull_results, you can't use other cmd, such as ```sc class```. +* The consoleMachine.ts will be replaced perRequestMachine.ts + pinia sooner or later + diff --git a/web-ui/arthasWebConsole/index.html b/web-ui/arthasWebConsole/index.html new file mode 100644 index 000000000..a03ec42a5 --- /dev/null +++ b/web-ui/arthasWebConsole/index.html @@ -0,0 +1,83 @@ + + + + + + + + + Arthas Console + + + + + +
+
+
+
+
+ +
+ +
+ + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/package.json b/web-ui/arthasWebConsole/package.json new file mode 100644 index 000000000..a4d0fc3dc --- /dev/null +++ b/web-ui/arthasWebConsole/package.json @@ -0,0 +1,40 @@ +{ + "name": "arthaswebconsole", + "private": false, + "version": "0.1.4", + "scripts": { + "dev": "vite --port 8000", + "build": "vue-tsc --noEmit && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@headlessui/vue": "^1.6.6", + "@heroicons/vue": "^1.0.6", + "@highlightjs/vue-plugin": "^2.1.0", + "@xstate/vue": "^2.0.0", + "bootstrap": "4.6.2", + "daisyui": "^2.31.0", + "echarts": "^5.3.3", + "global": "^4.4.0", + "highlight.js": "^11.6.0", + "jquery": "^3.6.1", + "npminstall": "^6.5.1", + "pinia": "^2.0.15", + "popper.js": "^1.16.1", + "typings": "^2.1.1", + "vue": "^3.2.25", + "vue-router": "4", + "xstate": "^4.32.1", + "xterm": "^5.0.0" + }, + "devDependencies": { + "@types/node": "^18.7.2", + "@vitejs/plugin-vue": "^2.3.3", + "autoprefixer": "^10.4.7", + "postcss": "^8.4.14", + "tailwindcss": "^3.1.4", + "typescript": "^4.7.4", + "vite": "^2.9.9", + "vue-tsc": "^0.34.7" + } +} diff --git a/web-ui/arthasWebConsole/postcss.config.js b/web-ui/arthasWebConsole/postcss.config.js new file mode 100644 index 000000000..33ad091d2 --- /dev/null +++ b/web-ui/arthasWebConsole/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/web-ui/arthasWebConsole/public/favicon.ico b/web-ui/arthasWebConsole/public/favicon.ico new file mode 100644 index 000000000..df9b02e1e Binary files /dev/null and b/web-ui/arthasWebConsole/public/favicon.ico differ diff --git a/web-ui/arthasWebConsole/public/fullsc.png b/web-ui/arthasWebConsole/public/fullsc.png new file mode 100644 index 000000000..642719a1e Binary files /dev/null and b/web-ui/arthasWebConsole/public/fullsc.png differ diff --git a/web-ui/arthasWebConsole/public/logo.png b/web-ui/arthasWebConsole/public/logo.png new file mode 100644 index 000000000..a58394ee0 Binary files /dev/null and b/web-ui/arthasWebConsole/public/logo.png differ diff --git a/web-ui/arthasWebConsole/src/main.css b/web-ui/arthasWebConsole/src/main.css new file mode 100644 index 000000000..9c15ed82d --- /dev/null +++ b/web-ui/arthasWebConsole/src/main.css @@ -0,0 +1,20 @@ +#terminal:-webkit-full-screen{ + background-color: rgb(255, 255, 12); +} +.container { + width: 100%; + min-height: 600px; +} +.fullSc { + z-index: 10000; + position: fixed; + top: 25%; + left: 90%; + display: none; +} +#fullScBtn { + border-radius:17px; + border: 0; + cursor: pointer; + background-color: black; +} \ No newline at end of file diff --git a/web-ui/arthasWebConsole/src/web-console.js b/web-ui/arthasWebConsole/src/web-console.js new file mode 100644 index 000000000..f27d9cb3d --- /dev/null +++ b/web-ui/arthasWebConsole/src/web-console.js @@ -0,0 +1,202 @@ +import "bootstrap"; +import 'bootstrap/dist/css/bootstrap.min.css'; +import $ from "jquery" +import "xterm/css/xterm.css" +import { Terminal } from "xterm" +var ws; +var xterm =new Terminal() +const DEFAULT_SCROLL_BACK = 1000 +const MAX_SCROLL_BACK = 9999999 +const MIN_SCROLL_BACK = 1 + +$(function () { + var url = window.location.href; + var ip = getUrlParam('ip'); + var port = getUrlParam('port'); + + if (ip != '' && ip != null) { + $('#ip').val(ip); + } else { + $('#ip').val(window.location.hostname); + } + if (port != '' && port != null) { + $('#port').val(port); + } + if (port == null && location.port == "8563") { + $('#port').val(8563); + } + + var iframe = getUrlParam('iframe'); + if (iframe != null && iframe != 'false') { + $("nav").hide() + } + + startConnect(true); +}); + +/** get params in url **/ +function getUrlParam(name, url) { + if (!url) url = window.location.href; + name = name.replace(/[\[\]]/g, '\\$&'); + var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), + results = regex.exec(url); + if (!results) return null; + if (!results[2]) return ''; + return decodeURIComponent(results[2].replace(/\+/g, ' ')); +} + +function getCharSize() { + var tempDiv = $('
').attr({ 'role': 'listitem' }); + var tempSpan = $('
').html('qwertyuiopasdfghjklzxcvbnm'); + tempDiv.append(tempSpan); + $("html body").append(tempDiv); + var size = { + width: tempSpan.outerWidth() / 26, + height: tempSpan.outerHeight(), + left: tempDiv.outerWidth() - tempSpan.outerWidth(), + top: tempDiv.outerHeight() - tempSpan.outerHeight(), + }; + tempDiv.remove(); + return size; +} + +function getWindowSize() { + var e = window; + var a = 'inner'; + if (!('innerWidth' in window)) { + a = 'client'; + e = document.documentElement || document.body; + } + var terminalDiv = document.getElementById("terminal-card"); + var terminalDivRect = terminalDiv.getBoundingClientRect(); + return { + width: terminalDivRect.width, + height: e[a + 'Height'] - terminalDivRect.top + }; +} + +function getTerminalSize() { + var charSize = getCharSize(); + var windowSize = getWindowSize(); + console.log('charsize'); + console.log(charSize); + console.log('windowSize'); + console.log(windowSize); + return { + cols: Math.floor((windowSize.width - charSize.left) / 10), + rows: Math.floor((windowSize.height - charSize.top) / 17) + }; +} + +/** init websocket **/ +function initWs(ip, port) { + var path = 'ws://' + ip + ':' + port + '/ws'; + ws = new WebSocket(path); +} + +/** init xterm **/ +function initXterm(cols, rows, scrollback) { + let scrollNumber = parseInt(scrollback, 10) + xterm = new Terminal({ + cols: cols, + rows: rows, + screenReaderMode: false, + rendererType: 'canvas', + convertEol: true, + scrollback: isValidNumber(scrollNumber) ? scrollNumber : DEFAULT_SCROLL_BACK + }); +} + +function isValidNumber(scrollNumber) { + return scrollNumber >= MIN_SCROLL_BACK && + scrollNumber <= MAX_SCROLL_BACK; +} + +/** begin connect **/ +window.startConnect = function startConnect(silent) { + var ip = $('#ip').val(); + var port = $('#port').val(); + if (ip == '' || port == '') { + alert('Ip or port can not be empty'); + return; + } + if (ws != null) { + alert('Already connected'); + return; + } + // init webSocket + initWs(ip, port); + ws.onerror = function () { + ws.close(); + ws = null; + !silent && alert('Connect error'); + }; + ws.onopen = function () { + console.log('open'); + $('#fullSc').show(); + var terminalSize = getTerminalSize() + let scrollback = getUrlParam('scrollback'); + console.log('terminalSize') + console.log(terminalSize) + // init xterm + initXterm(terminalSize.cols, terminalSize.rows, scrollback) + ws.onmessage = function (event) { + if (event.type === 'message') { + var data = event.data; + xterm.write(data); + } + }; + xterm.open(document.getElementById('terminal')); + console.log(xterm) + // xterm = new Terminal() + xterm.onData(function (data) { + ws.send(JSON.stringify({ action: 'read', data: data })) + }); + ws.send(JSON.stringify({ action: 'resize', cols: terminalSize.cols, rows: terminalSize.rows })); + window.setInterval(function () { + if (ws != null && ws.readyState === 1) { + ws.send(JSON.stringify({ action: 'read', data: "" })); + } + }, 30000); + } +} + +window.disconnect = function disconnect() { + try { + ws.close(); + ws.onmessage = null; + ws.onclose = null; + ws = null; + xterm.dispose(); + $('#fullSc').hide(); + alert('Connection was closed successfully!'); + } catch (e) { + alert('No connection, please start connect first.'); + } +} + +/** full screen show **/ +window.xtermFullScreen = function xtermFullScreen() { + var ele = document.getElementById('terminal-card'); + requestFullScreen(ele); +} + +function requestFullScreen(element) { + var requestMethod = element.requestFullScreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullScreen; + if (requestMethod) { + requestMethod.call(element); + } else if (typeof window.ActiveXObject !== "undefined") { + var wscript = new ActiveXObject("WScript.Shell"); + if (wscript !== null) { + wscript.SendKeys("{F11}"); + } + } +} + +window.addEventListener('resize', function () { + if (ws !== undefined && ws !== null) { + let terminalSize = getTerminalSize(); + ws.send(JSON.stringify({ action: 'resize', cols: terminalSize.cols, rows: terminalSize.rows })); + xterm.resize(terminalSize.cols, terminalSize.rows); + } +}); diff --git a/web-ui/arthasWebConsole/tailwind.config.js b/web-ui/arthasWebConsole/tailwind.config.js new file mode 100644 index 000000000..9736ec9a7 --- /dev/null +++ b/web-ui/arthasWebConsole/tailwind.config.js @@ -0,0 +1,24 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + "./ui/index.html", + "./ui/src/**/*.{vue,js,ts,jsx,tsx}", + ], + theme: { + extend: { + keyframes: { + }, + animation: { + 'spin-rev-pause':'0.3s linear 0s infinite reverse both pause spin', + 'spin-rev-running':'0.3s linear 0s infinite reverse both running spin' + }, + + }, + daisyui: { + themes: ["corporate"], + }, + }, + plugins: [ + require("daisyui") + ], +} diff --git a/web-ui/arthasWebConsole/tsconfig.json b/web-ui/arthasWebConsole/tsconfig.json new file mode 100644 index 000000000..f2613f415 --- /dev/null +++ b/web-ui/arthasWebConsole/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "esnext", + "useDefineForClassFields": true, + "module": "esnext", + "moduleResolution": "node", + "strict": true, + "jsx": "preserve", + "sourceMap": true, + "resolveJsonModule": true, + "isolatedModules": true, + "esModuleInterop": true, + "lib": ["esnext", "dom"], + "skipLibCheck": true, + "baseUrl": ".", + "paths": { + "@/*":["ui/src/*"] + }, + "experimentalDecorators": true + }, + "include": ["ui/src/**/*.ts", "ui/src/**/*.d.ts", "ui/src/**/*.tsx", "ui/src/**/*.vue","ui/tests/**/*.ts"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/web-ui/arthasWebConsole/tsconfig.node.json b/web-ui/arthasWebConsole/tsconfig.node.json new file mode 100644 index 000000000..e993792cb --- /dev/null +++ b/web-ui/arthasWebConsole/tsconfig.node.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "composite": true, + "module": "esnext", + "moduleResolution": "node" + }, + "include": ["vite.config.ts"] +} diff --git a/web-ui/arthasWebConsole/ui/index.html b/web-ui/arthasWebConsole/ui/index.html new file mode 100644 index 000000000..c0475fae3 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/index.html @@ -0,0 +1,14 @@ + + + + + + + Web UI + + +
+
+ + + diff --git a/web-ui/arthasWebConsole/ui/src/App.vue b/web-ui/arthasWebConsole/ui/src/App.vue new file mode 100644 index 000000000..bd21ed374 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/App.vue @@ -0,0 +1,48 @@ + + + diff --git a/web-ui/arthasWebConsole/ui/src/arthas.d.ts b/web-ui/arthasWebConsole/ui/src/arthas.d.ts new file mode 100644 index 000000000..7538d3222 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/arthas.d.ts @@ -0,0 +1,722 @@ + +type SessionAction = + | "join_session" + | "init_session" + | "close_session"; +type ResState = "SCHEDULED" | "SUCCEEDED" | "FAILED" | "REFUSED"; + +type MergeObj, U extends Record> = + T extends T ? { + [k in (keyof T | keyof U)]: k extends keyof T ? T[k] + : U[k]; + } + : never; + +type JobId> = T extends T + ? MergeObj> + : never; +type SessionId> = T extends T + ? MergeObj + : never; +// type Command> = T extends T +// ? T["results"][0] extends JobId +// ? "command" extends keyof T["results"][0] +// ? MergeObj +// : never +// : MergeObj +// : never; +type Command> = T extends T + ? MergeObj + : never; + +type CommonAction = T extends T ? MergeObj< + T, + { action: "exec" } + > + : never; +type unionExclude = T extends T ? Exclude : T; + +// 数值计算 +type BuildArray< + Length extends number, + Ele = unknown, + Arr extends unknown[] = [], +> = Arr["length"] extends Length ? Arr + : BuildArray; + +type Sub1 = BuildArray extends + [arr1: unknown, ...arr2: infer Rest] ? Rest["length"] + : never; + +// 命令T 可以添加N个参数 +type StringInclude = T extends T + ? N extends 0 ? T + : T | StringInclude<`${T} ${P}`, Sub1> + : never; + +type SessionReq = + | { + action: "init_session"; + } + | SessionId<{ + action: "join_session" | "close_session"; + }>; + +type AsyncReq = SessionId< + | { + action: "interrupt_job"; + } + | MergeObj< + { + action: "async_exec"; + }, + { + command: "dashboard"; + } | { + command: StringInclude<"stack", 3>; + } | { + command: `monitor -c ${number} ${string} ${string}`; + } | { + command: `trace ${string} ${string}`; + } | { + command: `tt -t ${string} ${string}`; + } | { + command: `watch ${string} ${string}`; + } + > +>; +type PullResults = SessionId<{ + action: "pull_results"; + consumerId?: string; +}>; +type CommandReq = CommonAction< + { + command: + | "sysenv" + | "version" + | "sysprop" + | "pwd" + | "jvm" + | "memory" + | "perfcounter -d" + | "classloader" + | "classloader -a" + | "classloader -t" + | "classloader --url-stat" + | `classloader ${string}` + | `sm -d ${string}` + | `sm ${string}` + | `jad ${string}` + | `dump ${string}` + | "retransform -l" + | `retransform ${string}` + | `retransform --classPattern ${string}` + | `mbean` + | `mbean ${string}` + | `mbean -m ${string}` + | `vmtool --action ${"forceGc" | "getInstances"} ${string}` + | "tt -l" + | `tt -i ${string} -p` + | `tt -s ${string}` + | `profiler ${"list" | "status" | "stop" | "resume" | "getSamples"}` + | `profiler ${string}` + | `stop` + | `ognl ${string}`; + } | { + command: StringInclude<"vmoption" | "thread", 2>; + } | { + command: StringInclude<"sc", 3>; + } | { + command: StringInclude<"heapdump" | "heapdump --live" | "reset", 1>; + } +>; + +type ArthasReq = SessionReq | CommandReq | AsyncReq | PullResults; +type ThreadStateCount = { + "NEW": number; + "RUNNABLE": number; + "BLOCKED": number; + "WAITING": number; + "TIMED_WAITING": number; + "TERMINATED": number; +}; +type StatusResult = { + type: "status"; + statusCode: 0; +} | { + type: "status"; + // 实际上不起效果 + statusCode: number; + message: string; +}; + +type InputResult = { + inputStatus: "ALLOW_INPUT" | "DISABLED" | "ALLOW_INTERRUPT"; + type: "input_status"; +}; + +type VmOption = MergeObj< + Record<"name" | "origin" | "value", string>, + Record<"writeable", boolean> +>; +type ThreadState = keyof ThreadStateCount; +type ThreadStats = { + cpu: number; + daemon: boolean; + deltaTime: number; + group: "system"; + id: number; + interrupted: boolean; + name: string; + priority: number; + state: ThreadState; + time: number; +}; +type StackTrace = { + className: string; + fileName: string; + lineNumber: number; + methodName: number; + nativeMethod: boolean; +}; +type ThreadInfo = { + blockedCount: number; + blockedTime: number; + inNative: true; + lockOwnerId: number; + lockedMonitors: []; + lockedSynchronizers: []; + stackTrace: StackTrace[]; + suspended: boolean; + threadId: number; + threadName: string; + threadState: ThreadState; + waitedCount: number; + waitedTime: number; +}; +type BusyThread = { + blockedCount: number; + blockedTime: number; + cpu: number; + daemon: true; + deltaTime: number; + group: string; + id: number; + inNative: boolean; + interrupted: boolean; + lockInfo: { + className: string; + identityHashCode: boolean; + }; + lockName: string; + lockOwnerId: number; + lockedMonitors: any[]; + lockedSynchronizers: any[]; + name: string; + priority: 10; + stackTrace: { + className: string; + fileName: string; + lineNumber: number; + methodName: string; + nativeMethod: boolean; + }[]; + state: "WAITING" | "TIMED_WAITING" | "RUNNABLE"; + suspended: string; + time: number; + waitedCount: number; + waitedTime: number; +}; +type JvmInfo = { + RUNTIME: Record<"name" | "value", string>[]; + "CLASS-LOADING": { name: string; value: number | boolean }[]; + COMPILATION: { name: string; value: number | string; desc: string }[]; + "GARBAGE-COLLECTORS": { + name: string; + value: { name: string; collectionCount: number; collectionTime: number }; + desc: string; + }[]; + "MEMORY-MANAGERS": { name: string; value: string[] }[]; + MEMORY: { + desc: string; + name: string; + value: { + name: string; + init: number; + used: number; + committed: number; + max: number; + } | number; + }[]; + "OPERATING-SYSTEM": Record<"name" | "value", string>[]; + THREAD: { + name: string; + value: number; + }[]; + "FILE-DESCRIPTOR": { + name: string; + value: number; + }[]; +}; +type MemoryInfo = Record<"heap" | "nonheap" | "buffer_pool", { + max: number; + name: string; + total: number; + type: string; + used: number; + usage?: number; +}[]>; +type RuntimeInfo = { + javaHome: string; + javaVersion: string; + osName: string; + osVersion: string; + processors: number; + systemLoadAverage: number; + timestamp: number; + uptime: number; +}; +type ClassDetailInfo = { + annotation: boolean; + annotations: string[]; + anonymousClass: boolean; + array: boolean; + classInfo: string; + classLoaderHash: string; + classloader: string[]; + codeSource: string; + enum: string; + interface: string; + interfaces: string[]; + localClass: string; + memberClass: string; + modifier: string; + name: string; + primitive: boolean; + simpleName: string; + superClass: string[]; + synthetic: boolean; +}; +type ClassField = { + annotations: string[]; + modifier: string; + name: string; + static: boolean; + type: string; + value: any; +}; +type MethodInfo = { + classLoaderHash: string; + constructor: boolean; + declaringClass: string; + descriptor: string; + exceptions: string[]; + parameters: string[]; + annotations: string[]; + methodName: string; + modifier: string; + returnType: string; +}; +type ClassLoaderNode = { + "hash": string; + "loadedCount": number; + "name": string; + "children": ClassLoaderNode[]; + "parent": string; +}; +type ClassInfo = MergeObj; +type TraceNode = { + children?: TraceNode[]; + className: string; + cost: number; + invoking: boolean; + lineNumber: number; + maxCost: number; + methodName: string; + minCost: number; + times: number; + totalCost: number; + type: "method"; +} | { + children: never; + exception: string; + lineNumber: number; + message: string; + type: "throw"; +} | { + children?: TraceNode[]; + classloader: string; + daemon: boolean; + priority: number; + threadId: number; + threadName: string; + timestamp: string; + type: "thread"; +}; +type TimeFragment = { + "className": string; + "cost": number; + "index": number; + "methodName": string; + "object": string; + "params": { + "expand": number; + "object": number; + }[]; + "return": boolean; + "returnObj": string; + "throw": boolean; + "throwExp": string; + "timestamp": string; +}; +type MonitorData = { + className: string; + cost: number; + failed: number; + methodName: number; + success: number; + total: number; +}; +type CommandResult = { + type: "command"; + state: ResState; + command: string; +} | { + type: "version"; + version: string; +} | { + type: "sysenv"; + env: Record; +} | { + type: "sysprop"; + props: Record; +} | { + type: "vmoption"; + vmOptions: vmOption[]; +} | { + type: "pwd"; + workingDir: string; +} | { + all: boolean; + threadStateCount: ThreadStateCount; + threadStats: ThreadStats[]; + threadInfo: never; + busyThreads: never; + type: "thread"; +} | { + threadStateCount: never; + threadInfo: ThreadInfo; + threadStats: never; + busyThreads: never; + type: "thread"; +} | { + all: boolean; + threadStateCount: never; + busyThreads: BusyThread[]; + threadInfo: never; + threadStats: never; + type: "thread"; +} | { + jvmInfo: JvmInfo; + type: "jvm"; +} | { + memoryInfo: MemoryInfo; + type: "memory"; +} | { + perfCounters: { + name: string; + units: string; + value: string | number; + variability: string; + }[]; + type: "perfcounter"; + } | { + "classLoaderStats": Record> + urlStats: never; + urls:never; + tree:never; + type: "classloader"; +} | { + type: "classloader"; + urlStats: { + [x: `{hash":${string},"name:${string}}`]: { + unUsedUrls: string[]; + usedUrls: string[]; + }; + }; + "classLoaderStats":never; + urls: never; + tree: never; +} | { + type: "classloader"; + urls: never; + "classLoaderStats"; + urlStats:never; + classLoaders: ClassLoaderNode[]; + tree: boolean; +} | { + type: "classloader"; + urls: string[]; + urlStats:never; + "classLoaderStats":never; + tree: never; +} | { + classInfo: ClassInfo; + detailed: true; + type: "sc"; + segment: 0; + withField: true; +} | { + classNames: string[]; + detailed: false; + segment: number; + type: "sc"; + withField: false; +} | { + classInfo: ClassDetailInfo; + detailed: true; + jobId: 31365; + segment: 0; + type: "sc"; + withField: false; +} | { + detail: true; + methodInfo: MethodInfo; + type: "sm"; +} | { + classInfo: { + classLoaderHash: string; + classloader: string[]; + name: string; + }; + location: string; + mappings: Record; + source: string; + type: "jad"; +} | { + retransformCount: number; + retransformEntries: { + bytes: string; + className: string; + id: number; + transformCount: number; + }[]; + retransformClasses: never; + type: "retransform"; +} | { + retransformCount: number; + retransformEntries: never; + retransformClasses: string[]; + type: "retransform"; +} | { + dumpedClasses: { + classLoaderHash: string; + classloader: string[]; + location: string; + name: string; + }[]; + type: "dump"; +} | { + gcInfos: { + collectionCount: number; + collectionTime: number; + name: string; + }[]; + memoryInfo: MemoryInfo; + runtimeInfo: RuntimeInfo; + threads: ThreadStats[]; + type: "dashboard"; +} | { + mbeanNames: string[]; + mbeanMetadata: never; + mbeanAttribute: never; + type: "mbean"; +} | { + mbeanNames: never; + mbeanMetadata: { + [x: string]: { + attributes: { + description: string; + is: boolean; + name: string; + readable: boolean; + type: string; + writable: boolean; + openType: Record; + }[]; + className: string; + constructors: { + description: string; + name: string; + signature: { + description: string; + name: string; + type: string; + }[]; + }[]; + description: string; + notifications: any[]; + operations: { + description: string; + impact: number; + name: string; + returnType: string; + signature: { + description: string; + name: string; + type: string; + }[]; + }[]; + }; + }; + mbeanAttribute: never; + type: "mbean"; +} | { + mbeanNames: never; + mbeanMetadata: never; + mbeanAttribute: { + [x: string]: { + name: string; + value: string | number | boolean | (number[]); + }[]; + }; + type: "mbean"; +} | { + dumpFile: string; + live: boolean; + type: "heapdump"; +} | { + type: "vmtool"; + value: string; +} | { + affect: { + classCount: number; + cost: number; + listenerId: number; + methodCount: number; + }; + type: "reset"; +} | { + classloader: string; + cost: number; + daemon: boolean; + priority: number; + stackTrace: StackTrace[]; + threadId: string; + threadName: string; + // date clock + ts: `${string} ${string}`; + type: "stack"; +} | { + monitorDataList: MonitorData[]; + type: "monitor"; +} | { + nodeCount: number; + root: TraceNode; + type: "trace"; +} | { + "expand": never; + "replayNo": never; + first: boolean; + timeFragmentList: TimeFragment[]; + replayResult: never; + sizeLimit: never; + type: "tt"; +} | { + "expand": number; + "replayNo": number; + first: never; + "replayResult": TimeFragment; + timeFragmentList: never; + "sizeLimit": number; + "type": "tt"; +} | { + accessPoint: "AtExceptionExit" | "AtEnter" | "AtExit"; + className: string; + cost: number; + methodName: string; + sizeLimit: number; + ts: string; + type: "watch"; + value: string; +} | { + "action": "list" | "status" | "stop" | "resume" | "getSamples"; + "executeResult": string; + "outputFile"?: string; + "type": "profiler"; +} | { + type: "ognl"; + value: string; +}; + +type EnchanceResult = { + success: boolean; + effect: Record<"listenerId" | "cost" | "classCount" | "methodCount", number>; + type: "enhancer"; +}; +type MessageResult = { + message: string; + type: "message"; +}; +type ArthasResResult = JobId< + | MessageResult + | StatusResult + | InputResult + | CommandResult + | EnchanceResult +>; + +type ResBody = Command< + JobId<{ + results: ArthasResResult[]; + timeExpired: boolean; + jobStatus: "TERMINATED" | "READY"; + }> +>; + +type CommonRes = { + state: ResState; + sessionId: string; + requestId?: string; + body: ResBody; +}; + +type AsyncRes = { + state: ResState; + sessionId: string; + requestId?: string; + // results:never; + body: Command< + JobId<{ + jobStatus: "READY" | "TERMINATED"; + }> + >; +}; + +type SessionRes = { + sessionId: string; + consumerId: string; + body: never; + state: Exclude; +}; + +type FailRes = SessionId<{ + message: string; + state: "FAILED" | "REFUSED"; + body: never; +}>; + +type ArthasRes = CommonRes | SessionRes | FailRes | AsyncRes; + +type BindQS = + | { req: CommandReq; res: CommonRes } + | { req: SessionReq; res: SessionRes } + | { req: AsyncReq; res: AsyncRes }; +// autoComplete +type Item = { name: string; value: unknown }; + +// Tree +interface TreeNode { + children: TreeNode[]; + meta: unknown; +} diff --git a/web-ui/arthasWebConsole/ui/src/assets/arthas.png b/web-ui/arthasWebConsole/ui/src/assets/arthas.png new file mode 100644 index 000000000..73317782d Binary files /dev/null and b/web-ui/arthasWebConsole/ui/src/assets/arthas.png differ diff --git a/web-ui/arthasWebConsole/ui/src/assets/favicon.ico b/web-ui/arthasWebConsole/ui/src/assets/favicon.ico new file mode 100644 index 000000000..df9b02e1e Binary files /dev/null and b/web-ui/arthasWebConsole/ui/src/assets/favicon.ico differ diff --git a/web-ui/arthasWebConsole/ui/src/components/NavHeader.vue b/web-ui/arthasWebConsole/ui/src/components/NavHeader.vue new file mode 100644 index 000000000..7bd8ed542 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/components/NavHeader.vue @@ -0,0 +1,165 @@ + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/components/dialog/ErrDialog.vue b/web-ui/arthasWebConsole/ui/src/components/dialog/ErrDialog.vue new file mode 100644 index 000000000..c4ebc5fd6 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/components/dialog/ErrDialog.vue @@ -0,0 +1,52 @@ + + + diff --git a/web-ui/arthasWebConsole/ui/src/components/dialog/InputDialog.vue b/web-ui/arthasWebConsole/ui/src/components/dialog/InputDialog.vue new file mode 100644 index 000000000..63ca52a2e --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/components/dialog/InputDialog.vue @@ -0,0 +1,62 @@ + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/components/dialog/SuccessDialog.vue b/web-ui/arthasWebConsole/ui/src/components/dialog/SuccessDialog.vue new file mode 100644 index 000000000..e0cbd2041 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/components/dialog/SuccessDialog.vue @@ -0,0 +1,50 @@ + + + diff --git a/web-ui/arthasWebConsole/ui/src/components/dialog/WarnDialog.vue b/web-ui/arthasWebConsole/ui/src/components/dialog/WarnDialog.vue new file mode 100644 index 000000000..e41e0b509 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/components/dialog/WarnDialog.vue @@ -0,0 +1,60 @@ + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/components/input/AutoComplete.vue b/web-ui/arthasWebConsole/ui/src/components/input/AutoComplete.vue new file mode 100644 index 000000000..b1e382a99 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/components/input/AutoComplete.vue @@ -0,0 +1,107 @@ + + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/components/input/ClassInput.vue b/web-ui/arthasWebConsole/ui/src/components/input/ClassInput.vue new file mode 100644 index 000000000..afb3c9da7 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/components/input/ClassInput.vue @@ -0,0 +1,89 @@ + + + diff --git a/web-ui/arthasWebConsole/ui/src/components/input/MethodInput.vue b/web-ui/arthasWebConsole/ui/src/components/input/MethodInput.vue new file mode 100644 index 000000000..bfddd02d9 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/components/input/MethodInput.vue @@ -0,0 +1,112 @@ + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/components/input/PlayStop.vue b/web-ui/arthasWebConsole/ui/src/components/input/PlayStop.vue new file mode 100644 index 000000000..2b61738ed --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/components/input/PlayStop.vue @@ -0,0 +1,20 @@ + + + diff --git a/web-ui/arthasWebConsole/ui/src/components/input/SwitchInput.vue b/web-ui/arthasWebConsole/ui/src/components/input/SwitchInput.vue new file mode 100644 index 000000000..102332ab2 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/components/input/SwitchInput.vue @@ -0,0 +1,43 @@ + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/components/input/TodoList.vue b/web-ui/arthasWebConsole/ui/src/components/input/TodoList.vue new file mode 100644 index 000000000..401e52e36 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/components/input/TodoList.vue @@ -0,0 +1,59 @@ + + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/components/routeTo/NavAside.vue b/web-ui/arthasWebConsole/ui/src/components/routeTo/NavAside.vue new file mode 100644 index 000000000..83551f238 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/components/routeTo/NavAside.vue @@ -0,0 +1,73 @@ + + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/components/routeTo/SelectCmd.vue b/web-ui/arthasWebConsole/ui/src/components/routeTo/SelectCmd.vue new file mode 100644 index 000000000..b02628fbd --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/components/routeTo/SelectCmd.vue @@ -0,0 +1,35 @@ + + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/components/show/CmdResMenu.vue b/web-ui/arthasWebConsole/ui/src/components/show/CmdResMenu.vue new file mode 100644 index 000000000..3adb40cc9 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/components/show/CmdResMenu.vue @@ -0,0 +1,57 @@ + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/components/show/Enhancer.vue b/web-ui/arthasWebConsole/ui/src/components/show/Enhancer.vue new file mode 100644 index 000000000..97b53acd2 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/components/show/Enhancer.vue @@ -0,0 +1,54 @@ + + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/components/show/OptionConfigMenu.vue b/web-ui/arthasWebConsole/ui/src/components/show/OptionConfigMenu.vue new file mode 100644 index 000000000..59bbb5ab4 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/components/show/OptionConfigMenu.vue @@ -0,0 +1,43 @@ + + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/components/show/ResTable.vue b/web-ui/arthasWebConsole/ui/src/components/show/ResTable.vue new file mode 100644 index 000000000..210fb2723 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/components/show/ResTable.vue @@ -0,0 +1,33 @@ + + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/components/show/Tree.vue b/web-ui/arthasWebConsole/ui/src/components/show/Tree.vue new file mode 100644 index 000000000..15b3919d6 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/components/show/Tree.vue @@ -0,0 +1,53 @@ + + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/env.d.ts b/web-ui/arthasWebConsole/ui/src/env.d.ts new file mode 100644 index 000000000..3af921add --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/env.d.ts @@ -0,0 +1,16 @@ +/// + +declare module '*.vue' { + import type { DefineComponent } from 'vue' + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types + const component: DefineComponent<{}, {}, any> + export default component +} +interface ImportMetaEnv { + readonly VITE_APP_TITLE: string + // 更多环境变量... +} + +interface ImportMeta { + readonly env: ImportMetaEnv +} \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/index.css b/web-ui/arthasWebConsole/ui/src/index.css new file mode 100644 index 000000000..dbd5ef72a --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/index.css @@ -0,0 +1,12 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer components { + .button-style { + @apply bg-blue-400 hover:opacity-50 transition rounded-md p-2 + } + .input-btn-style { + @apply border p-2 rounded-xl hover:shadow-md transition border-gray-300 + } +} \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/machines/consoleMachine.ts b/web-ui/arthasWebConsole/ui/src/machines/consoleMachine.ts new file mode 100644 index 000000000..e620423e3 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/machines/consoleMachine.ts @@ -0,0 +1,483 @@ +import { assign, createMachine, DoneInvokeEvent, spawn } from "xstate"; +import { fetchStore } from "@/stores/fetch"; +import { publicStore } from "@/stores/public"; +import transformMachine from "./transformConfigMachine"; + +interface CTX { + toObjM: typeof transformMachine | null; + inputRaw: any; + inputValue?: ArthasReq; + request?: Request; + response?: ArthasRes; + resArr: (ArthasResResult | SessionRes | AsyncRes)[]; + err: string; + // 暂时先anyscript + publicStore?: any; + fetchStore?: any; +} +type ET = + | { + type: "SUBMIT"; + value: ArthasReq | string; + } + | { + type: "error.platform"; + data: any; + } + | { + type: "done.invoke.getCommon"; + data: CommonRes; + } + | { + type: "done.invoke.getSession"; + data: SessionRes; + } + | { + type: "done.invoke.getAsync"; + data: AsyncRes; + } + | { + type: "INIT"; + } + // | { + // type: "CLEAR_RESARR"; + // } + | { + type: ""; + }; + +const machine = + /** @xstate-layout N4IgpgJg5mDOIC5QGMD2A7WqA2YB0AlhLgMQDKAqgEICyAkgCqKgAOqsBALgRsyAB6IAjAHYALHiEBmAKxiADADYATIoAcytaLEAaEAE9hQgJx5FQtWMUzjU+cvlq1AX2d60mHPmyoAhhAJ0KBIIDHxAgDdUAGt8DyxcPB9-QKgESNRkX24MAG15AF0+Ng4c9D5BBBl5ITNZMREZRUVjeWMtPUMEIXs8Y0UxLRF5KUtBmVd3DATvPwCgkjAAJyXUJbwWbGyAMzWAWzx4ryS51PT0KKyy-KKkEBKuHnK7yuraxXrG5tb2oU7EZSAvBOZrKERCGzKQbGESuNwgdCoCBwPhHRJEXDFdiPXgvRBiZT-bpSKSSeT2KRfKHGMQTeFo2YpIJY0pPCoAyx4OwNCEyERqeQKCFEnoiMzU8RiGFyRpSSYgBl4WAAV2QyDg8DuDzK7IQ6hkeChgLUUmUFkBLSJrT64KkihEgKU9rUsPp02O218BGwyqWYBZOOeoEq+sNBM0pvNqmMRLN8mBtlEIikYiEVhNrqmnkxWuxOrx3TUIrUeHJZfLFddriAA */ + createMachine({ + context: { + toObjM: null, + inputRaw: undefined, + inputValue: undefined, + request: undefined, + response: undefined, + publicStore: undefined, + fetchStore: undefined, + resArr: [], + err: "", + }, + schema: { + context: {} as CTX, + events: {} as ET, + services: {} as { + requestData: { data: any }; + stringToObj: { data: any }; + }, + }, + id: "console", + initial: "idle", + states: { + idle: { + on: { + // 延迟pinia的挂载时机 + INIT: { + target: "ready", + actions: "initStore", + }, + }, + }, + ready: { + initial: "stringVal", + states: { + stringVal: { + on: { + SUBMIT: [{ + cond: "notString", + actions: "rawInput", + target: "objVal", + }, { + actions: [ + "rawInput", + "toObj", + ], + target: "objVal", + }], + }, + }, + objVal: { + entry: assign((ctx, e) => { + return { + inputValue: ctx.inputRaw, + }; + }), + always: [ + { cond: "notObj", target: "#failure" }, + { + cond: "isAsync", + target: "#asyncReq", + }, + { + cond: "isCommon", + target: "#common", + }, + { + cond: "isSession", + target: "#session", + }, + { + actions: "notReq", + target: "#failure", + }, + ], + exit: "getReq", + }, + }, + }, + common: { + id: "common", + tags: ["loading"], + entry: "waitReq", + invoke: { + id: "getCommon", + src: "requestData", + onDone: [ + { + cond: "cmdSucceeded", + actions: ["transformRes"], + target: "success", + }, + { + actions: ["setErrMessage"], + target: "failure", + }, + ], + onError: [ + { + actions: ["setErrMessage"], + target: "failure", + }, + ], + }, + states: {}, + }, + session: { + id: "session", + tags: ["loading"], + invoke: { + id: "getSession", + src: "requestData", + onDone: [ + { + cond: "cmdSucceeded", + actions: ["transformSessionRes"], + target: "success", + }, + { + actions: ["setErrMessage"], + target: "failure", + }, + ], + onError: [ + { + actions: ["setErrMessage"], + target: "failure", + }, + ], + }, + }, + asyncReq: { + id: "asyncReq", + tags: ["loading"], + entry: "waitReq", + invoke: { + id: "getAsync", + src: "requestData", + onDone: [ + { + cond: "cmdSucceeded", + actions: ["transformAsyncRes"], + target: "success", + }, + { + actions: ["setErrMessage"], + target: "failure", + }, + ], + onError: [ + { + actions: ["setErrMessage"], + target: "failure", + }, + ], + }, + }, + success: { + entry: ["needReportSuccess", "renderRes"], + tags: "result", + always: { + actions: ["reset"], + target: "ready", + }, + }, + failure: { + id: "failure", + tags: "result", + entry: "outputErr", + always: { + actions: ["reset"], + target: "ready", + }, + }, + hist: { + type: "history", + }, + }, + }, { + services: { + requestData: async (context) => { + const res = await fetch(context.request as Request); + if (!res.ok) return Promise.reject("server error"); + return res.json(); + }, + }, + actions: { + initStore: assign((context, event) => { + if (event.type !== "INIT") return {}; + return { + publicStore: publicStore(), + fetchStore: fetchStore(), + }; + }), + rawInput: assign((context, event) => { + if (event.type !== "SUBMIT") return {}; + return { + inputRaw: event.value, + }; + }), + waitReq: (context) => { + context.fetchStore.onWait(); + }, + getReq: assign((context, event) => { + if ( + !context.inputValue || !context.fetchStore || + !("getRequest" in context.fetchStore) + ) { + return {}; + } + return { + request: context.fetchStore?.getRequest(context.inputValue), + inputValue: context.inputValue, + }; + }), + transformRes: assign((context, event) => { + if (event.type !== "done.invoke.getCommon") return {}; + + return { + response: event.data, + }; + }), + transformSessionRes: assign((context, event) => { + if (event.type !== "done.invoke.getSession") return {}; + + return { + response: event.data, + }; + }), + transformAsyncRes: assign((ctx, e) => { + if (e.type !== "done.invoke.getAsync") return {}; + return { + response: e.data, + }; + }), + renderRes: assign((context, event) => { + let resArr: (ArthasResResult | SessionRes | AsyncRes)[] = + context.resArr; + const response = context.response; + if (!response) { + return {}; + } + if ( + Object.hasOwn(response, "body") && + Object.hasOwn((response as CommonRes).body, "results") + ) { + resArr = resArr.concat((context.response as CommonRes).body.results); + } else { + resArr = resArr.concat([response] as (SessionRes | AsyncRes)[]); + } + return { resArr: resArr.filter((v) => v && !Number.isNaN(v)) }; + }), + outputErr: assign({ + err: (context, event) => { + context.publicStore.$patch({ + isErr: true, + ErrMessage: context.err, + }); + return ""; + }, + }), + // clearResArr: assign((context, event) => ({ resArr: [] })), + toObj: assign((ctx) => { + const m = spawn(transformMachine, { sync: true }); + m.send({ + type: "INPUT", + data: ctx.inputRaw as string, + }); + const s = m.getSnapshot(); + if (s?.matches("failure")) { + return { + inputRaw: undefined, + err: s.context.err, + }; + } + let inputRaw:ArthasReq = { + sessionId:undefined, + ...s?.context.output + } as ArthasReq + return { + inputRaw, + }; + }), + needReportSuccess: (context, e) => { + if (context.inputValue?.action === "close_session") { + context.fetchStore.$patch({ + sessionId: "", + consumerId: "", + online: false, + }); + context.publicStore.$patch({ + isSuccess: true, + SuccessMessage: `close session success!`, + }); + return; + } + if (context.inputValue?.action === "init_session") { + const response = (context.response as SessionRes); + context.fetchStore.$patch({ + sessionId: response.sessionId, + consumerId: response.consumerId, + online: true, + }); + context.publicStore.$patch({ + isSuccess: true, + SuccessMessage: `init_session success!`, + }); + return; + } + + if ( + context.inputValue?.action === "exec" && + context.inputValue.command.includes("vmoption") && + context.inputValue.command !== "vmoption" + ) { + context.publicStore.$patch({ + isSuccess: true, + SuccessMessage: JSON.stringify( + (context.response as CommonRes).body.results, + ), + }); + return; + } + }, + setErrMessage: assign((_ctx, e) => { + if (e.type === "SUBMIT" || e.type === "INIT" || e.type === "") { + return {}; + } + return { err: e.data as unknown as string }; + }), + reset: (ctx, e) => { + ctx.fetchStore.waitDone(); + }, + notReq: assign((context) => { + return { + err: "not request", + }; + }), + }, + guards: { + // 判断命令是否有问题 + cmdSucceeded: (context, event) => { + if ( + event.type !== "done.invoke.getCommon" && + event.type !== "done.invoke.getSession" && + event.type !== "done.invoke.getAsync" + ) { + return false; + } + if (["SCHEDULED", "SUCCEEDED"].includes(event.data.state)) { + if (Object.hasOwn(event.data, "body")) { + if (Object.hasOwn(event.data.body, "results")) { + return (event.data as CommonRes).body.results.every((result) => { + if (result.type === "status" && result.statusCode !== 0) { + return false; + } + if ( + result.type === "message" && + result.message === + "all consumers are unhealthy, current job was interrupted." + ) { + return false; + } + return true; + }); + } else { + return ["READY", "TERMINATED"].includes( + (event.data as AsyncRes).body.jobStatus, + ); + } + } + // SessionRes + return true; + } + + if(context.inputValue && context.inputValue.action=== "interrupt_job") { + /** + * 永不拦截打断回收的错误 + */ + return true + } + return false; + }, + isSession: (context) => { + if (!context) return false; + if ( + ["join_session", "init_session", "close_session", "interrupt_job"] + .includes(context.inputValue!.action) + ) { + console.log("isSession"); + return true; + } + return false; + }, + isCommon: (context) => { + if (!context) return false; + if ( + ["exec", "pull_results"] + .includes(context.inputValue!.action) + ) { + console.log("isCommon"); + return true; + } + return false; + }, + isAsync: (context) => { + if (!context) return false; + if ( + ["async_exec"] + .includes(context.inputValue!.action) + ) { + console.log("isAsync"); + return true; + } + return false; + }, + notObj: (ctx) => { + if (ctx.inputValue) return false; + return true; + }, + // notReq: (context) => { + // if (context.inputValue) return true; + // return false; + // }, + notString: (context, event) => { + if (event.type !== "SUBMIT") return true; + if (typeof event.value !== "string") return true; + return false; + }, + }, + }); + +export default machine; diff --git a/web-ui/arthasWebConsole/ui/src/machines/perRequestMachine.ts b/web-ui/arthasWebConsole/ui/src/machines/perRequestMachine.ts new file mode 100644 index 000000000..19c2691f6 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/machines/perRequestMachine.ts @@ -0,0 +1,462 @@ +import { assign, createMachine, DoneInvokeEvent, spawn } from "xstate"; +import { fetchStore } from "@/stores/fetch"; +import { publicStore } from "@/stores/public"; +import transformMachine from "./transformConfigMachine"; + +interface CTX { + toObjM: typeof transformMachine | null; + inputRaw: any; + inputValue?: ArthasReq; + request?: Request; + response?: ArthasRes; + err: string; + // 暂时先anyscript + publicStore?: any; + fetchStore?: any; +} +type ET = + | { + type: "SUBMIT"; + value: ArthasReq | string; + } + | { + type: "error.platform"; + data: any; + } + | { + type: "done.invoke.getCommon"; + data: CommonRes; + } + | { + type: "done.invoke.getSession"; + data: SessionRes; + } + | { + type: "done.invoke.getAsync"; + data: AsyncRes; + } + | { + type: "INIT"; + } + | { + type: ""; + }; + +const permachine = createMachine({ + context: { + toObjM: null, + inputRaw: undefined, + inputValue: undefined, + request: undefined, + response: undefined, + publicStore: undefined, + fetchStore: undefined, + err: "", + }, + schema: { + context: {} as CTX, + events: {} as ET, + services: {} as { + requestData: { data: any }; + stringToObj: { data: any }; + }, + }, + id: "console", + initial: "idle", + states: { + idle: { + on: { + // 延迟pinia的挂载时机 + INIT: { + target: "ready", + actions: "initStore", + }, + }, + }, + ready: { + initial: "stringVal", + states: { + stringVal: { + on: { + SUBMIT: [{ + cond: "notString", + actions: "rawInput", + target: "objVal", + }, { + actions: [ + "rawInput", + "toObj", + ], + target: "objVal", + }], + }, + }, + objVal: { + entry: assign((ctx, e) => { + return { + inputValue: ctx.inputRaw, + }; + }), + always: [ + { cond: "notObj", target: "#failure" }, + { + cond: "isAsync", + target: "#asyncReq", + }, + { + cond: "isCommon", + target: "#common", + }, + { + cond: "isSession", + target: "#session", + }, + { + actions: "notReq", + target: "#failure", + }, + ], + exit: "getReq", + }, + }, + }, + common: { + id: "common", + tags: ["loading"], + entry: "waitReq", + invoke: { + id: "getCommon", + src: "requestData", + onDone: [ + { + cond: "cmdSucceeded", + actions: ["transformRes"], + target: "success", + }, + { + actions: ["setErrMessage"], + target: "failure", + }, + ], + onError: [ + { + actions: ["setErrMessage"], + target: "failure", + }, + ], + }, + }, + session: { + id: "session", + tags: ["loading"], + invoke: { + id: "getSession", + src: "requestData", + onDone: [ + { + cond: "cmdSucceeded", + actions: ["transformSessionRes"], + target: "success", + }, + { + actions: ["setErrMessage"], + target: "failure", + }, + ], + onError: [ + { + actions: ["setErrMessage"], + target: "failure", + }, + ], + }, + }, + asyncReq: { + id: "asyncReq", + tags: ["loading"], + entry: "waitReq", + invoke: { + id: "getAsync", + src: "requestData", + onDone: [ + { + cond: "cmdSucceeded", + actions: ["transformAsyncRes"], + target: "success", + }, + { + actions: ["setErrMessage"], + target: "failure", + }, + ], + onError: [ + { + actions: ["setErrMessage"], + target: "failure", + }, + ], + }, + }, + success: { + entry: ["needReportSuccess", "reset"], + type: "final", + tags: "result", + }, + failure: { + id: "failure", + type: "final", + tags: "result", + entry: ["outputErr", "reset"], + }, + hist: { + type: "history", + }, + }, +}, { + services: { + requestData: async (context) => { + const res = await fetch(context.request as Request); + if (!res.ok) return Promise.reject("server error"); + return res.json(); + }, + }, + actions: { + initStore: assign((context, event) => { + if (event.type !== "INIT") return {}; + return { + publicStore: publicStore(), + fetchStore: fetchStore(), + }; + }), + rawInput: assign((context, event) => { + if (event.type !== "SUBMIT") return {}; + return { + inputRaw: event.value, + }; + }), + waitReq: (context) => { + context.fetchStore.onWait(); + }, + getReq: assign((context, event) => { + if ( + !context.inputValue || !context.fetchStore || + !("getRequest" in context.fetchStore) + ) { + return {}; + } + /** + * session的never和undefinded让fetch.ts来控制 + */ + return { + request: context.fetchStore?.getRequest(context.inputValue), + inputValue: context.inputValue as ArthasReq, + }; + }), + transformRes: assign({ + response: (context, event) => { + if (event.type !== "done.invoke.getCommon") return undefined; + return event.data; + }, + }), + transformSessionRes: assign((context, event) => { + if (event.type !== "done.invoke.getSession") return {}; + return { + response: event.data, + }; + }), + transformAsyncRes: assign((ctx, e) => { + if (e.type !== "done.invoke.getAsync") return {}; + return { + response: e.data, + }; + }), + outputErr: assign((context, event) => { + if (!context.publicStore.ignore) { + context.publicStore.$patch({ + isErr: true, + ErrMessage: context.err, + }); + } else{ + console.error(context.err) + } + return { + err: "", + }; + }), + // clearResArr: assign((context, event) => ({ resArr: [] })), + toObj: assign((ctx) => { + const m = spawn(transformMachine, { sync: true }); + m.send({ + type: "INPUT", + data: ctx.inputRaw as string, + }); + const s = m.getSnapshot(); + if (s?.matches("failure")) { + return { + inputRaw: undefined, + err: s.context.err, + }; + } + return { + inputRaw: s?.context.output as ArthasReq, + }; + }), + needReportSuccess: (context, e) => { + + if (context.inputValue?.action === "close_session") { + context.fetchStore.$patch({ + sessionId: "", + consumerId: "", + online: false, + }); + if(context.publicStore.ignore) return; + context.publicStore.$patch({ + isSuccess: true, + SuccessMessage: `close session success!`, + }); + return; + } + if (context.inputValue?.action === "init_session") { + const response = (context.response as SessionRes); + context.fetchStore.$patch({ + sessionId: response.sessionId, + consumerId: response.consumerId, + online: true, + }); + if(context.publicStore.ignore) return; + context.publicStore.$patch({ + isSuccess: true, + SuccessMessage: `init_session success!`, + }); + return; + } + + if ( + (context.inputValue?.action === "exec" || + context.inputValue?.action === "async_exec") && + context.inputValue.command.search("profiler") >= 0 + ) { + let result = (context.response as CommonRes).body.results[0]; + if ( + result.type === "profiler" && + ["start", "resume", "stop"].includes(result.action) + ) { + context.publicStore.$patch({ + isSuccess: true, + SuccessMessage: result.executeResult, + }); + } + return; + } + if ( + context.inputValue?.action === "exec" && + context.inputValue.command.includes("vmoption") && + context.inputValue.command !== "vmoption" + ) { + context.publicStore.$patch({ + isSuccess: true, + SuccessMessage: JSON.stringify( + (context.response as CommonRes).body.results, + ), + }); + return; + } + }, + setErrMessage: assign((_ctx, e) => { + if (e.type === "SUBMIT" || e.type === "INIT" || e.type === "") { + return {}; + } + return { err: e.data as unknown as string }; + }), + reset: (ctx, e) => { + ctx.fetchStore.waitDone(); + }, + notReq: assign((context) => { + return { + err: "not request", + }; + }), + }, + guards: { + // 判断命令是否有问题 + cmdSucceeded: (context, event) => { + if ( + event.type !== "done.invoke.getCommon" && + event.type !== "done.invoke.getSession" && + event.type !== "done.invoke.getAsync" + ) { + return false; + } + if (["SCHEDULED", "SUCCEEDED"].includes(event.data.state)) { + if (Object.hasOwn(event.data, "body")) { + if (Object.hasOwn(event.data.body, "results")) { + return (event.data as CommonRes).body.results.every((result) => { + return result.type === "status" ? result.statusCode === 0 : true; + }); + } else { + return ["READY", "TERMINATED"].includes( + (event.data as AsyncRes).body.jobStatus, + ); + } + } + // SessionRes + return true; + } + if (context.inputValue && context.inputValue.action === "interrupt_job") { + /** + * 永不拦截打断回收的错误 + */ + return true; + } + return false; + }, + isSession: (context) => { + if (!context) return false; + if ( + ["join_session", "init_session", "close_session", "interrupt_job"] + .includes(context.inputValue!.action) + ) { + console.log("isSession"); + return true; + } + return false; + }, + isCommon: (context) => { + if (!context) return false; + if ( + ["exec"] + .includes(context.inputValue!.action) + ) { + console.log("isCommon"); + return true; + } + return false; + }, + isAsync: (context) => { + if (!context) return false; + if ( + ["async_exec", "pull_results"] + .includes(context.inputValue!.action) + ) { + console.log("isAsync"); + return true; + } + return false; + }, + notObj: (ctx) => { + if (ctx.inputValue) return false; + return true; + }, + // notReq: (context) => { + // if (context.inputValue) return true; + // return false; + // }, + notString: (context, event) => { + if (event.type !== "SUBMIT") return true; + if (typeof event.value !== "string") return true; + return false; + }, + }, +}); + +export default permachine; diff --git a/web-ui/arthasWebConsole/ui/src/machines/transformConfigMachine.ts b/web-ui/arthasWebConsole/ui/src/machines/transformConfigMachine.ts new file mode 100644 index 000000000..d356e0fde --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/machines/transformConfigMachine.ts @@ -0,0 +1,111 @@ +import { assign, createMachine } from "xstate"; +import { respond } from "xstate/lib/actions"; +// import { publicStore } from "@/stores/public"; +type Output = object; +interface CTX { + inputValue: string; + output?: Output; + notJSON: symbol; + err: string; + // 暂时先anyscript + // publicStore?: any, +} +type ET = + | { + type: "INPUT"; + data: string; + } + | { + type: "FAILURE", + data: string + } + | { + type: "SUCCESS"; + data: Output, + }; + +const transformMachine = + /** @xstate-layout N4IgpgJg5mDOIC5QGMD2A7WqA2YB0AlhLgMQDKAqgEICyAkgCqKgAOqsBALgRsyAB6IAjAHYALHiEBmAKxiADADYATIoAcytaLEAaEAE9hQgJx5FQtWMUzjU+cvlq1AX2d60mHPmyoAhhAJ0KBIIDHxAgDdUAGt8DyxcPB9-QKgESNRkX24MAG15AF0+Ng4c9D5BBBl5ITNZMREZRUVjeWMtPUMEIXs8Y0UxLRF5KUtBmVd3DATvPwCgkjAAJyXUJbwWbGyAMzWAWzx4ryS51PT0KKyy-KKkEBKuHnK7yuraxXrG5tb2oU7EZSAvBOZrKERCGzKQbGESuNwgdCoCBwPhHRJEXDFdiPXgvRBiZT-bpSKSSeT2KRfKHGMQTeFo2YpIJY0pPCoAyx4OwNCEyERqeQKCFEnoiMzU8RiGFyRpSSYgBl4WAAV2QyDg8DuDzK7IQ6hkeChgLUUmUFkBLSJrT64KkihEgKU9rUsPp02O218BGwyqWYBZOOeoEq+sNBM0pvNqmMRLN8mBtlEIikYiEVhNrqmnkxWuxOrx3TUIrUeHJZfLFddriAA */ + createMachine( + { + id: "JSON_TO_OBJ", + schema: { + context: {} as CTX, + events: {} as ET, + }, + context: { + inputValue: "???", + notJSON: Symbol(""), + output: undefined, + err: "", + }, + initial: "idle", + states: { + idle: { + on: { + INPUT: [{ + cond: "isString", + actions: "getVal", + target: "handle", + }, { + actions: assign(()=>({err:"not string"})) as any, + target: "failure", + }], + }, + }, + handle: { + always: [ + { cond: "isJSON", actions: "handleEnvJSON", target: "success" }, + { + actions: assign({err:"not JSON"}), + target: "failure", + }, + ], + }, + failure: { + tags:["result"], + entry: respond("FAILURE"), + type: "final", + }, + success: { + tags:["result"], + entry:respond("SUCCESS"), + type: "final", + }, + }, + }, + { + actions: { + getVal: assign((context, e) => { + if (e.type !== "INPUT") return {}; + return { + inputValue: e.data, + }; + }), + handleEnvJSON: assign((context) => { + const output = JSON.parse(context.inputValue); + return { + output, + }; + }), + }, + guards: { + isString: (ctx, e) => { + if (e.type !== "INPUT") return true; + if (typeof e.data !== "string") return false; + return true; + }, + isJSON: (ctx, e) => { + // if (e.type !== "INPUT") return true; + try { + JSON.parse(ctx.inputValue); + return true; + } catch { + return false; + } + }, + }, + }, + ); + +export default transformMachine; diff --git a/web-ui/arthasWebConsole/ui/src/main.ts b/web-ui/arthasWebConsole/ui/src/main.ts new file mode 100644 index 000000000..12ec8fc12 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/main.ts @@ -0,0 +1,11 @@ +import { createApp } from "vue"; +import "./index.css"; +import router from "./router/index"; +import { createPinia } from "pinia"; +import App from "./App.vue"; +import "highlight.js/styles/stackoverflow-light.css"; +const app = createApp(App); + +app.use(router) + .use(createPinia()) + .mount("#app"); diff --git a/web-ui/arthasWebConsole/ui/src/router/index.ts b/web-ui/arthasWebConsole/ui/src/router/index.ts new file mode 100644 index 000000000..49a31b54e --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/router/index.ts @@ -0,0 +1,19 @@ +import { fetchStore } from "@/stores/fetch"; +import { + createRouter, + createWebHashHistory, +} from "vue-router"; +import routes from "./routes"; + +const router = createRouter({ + history: createWebHashHistory(), + routes, +}); +router.beforeEach((to, from, next) => { + fetchStore() + .interruptJob() + .finally(() => { + next(); + }); +}); +export default router; diff --git a/web-ui/arthasWebConsole/ui/src/router/routes.ts b/web-ui/arthasWebConsole/ui/src/router/routes.ts new file mode 100644 index 000000000..411679ccf --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/router/routes.ts @@ -0,0 +1,115 @@ +import { RouteRecordRaw } from "vue-router"; + +const routes: RouteRecordRaw[] = [ + { + path: "/", + redirect: "/dashboard", + }, + { + path: "/config", + component: () => import("@/views/Config.vue"), + }, + { + path: "/console", + component: () => import("@/views/Console.vue"), + }, + { + path: "/dashboard", + component: () => import("@/views/DashBoard.vue"), + }, + { + path: "/synchronize", + component: () => import("@/views/Synchronize.vue"), + children: [ + { + path: "", + redirect: "/synchronize/mbean", + }, + { + path: "thread", + component: () => import("@/views/sync/Thread.vue"), + }, + // { + // path: "memory", + // component: () => import("@/views/sync/Memory.vue"), + // }, + { + path: "jad", + component: () => import("@/views/sync/Jad.vue"), + }, + { + path: "retransform", + component: () => import("@/views/sync/Retransform.vue"), + }, + { + path: "mbean", + component: () => import("@/views/sync/Mbean.vue"), + }, + { + path: "classLoader", + component: () => import("@/views/sync/ClassLoader.vue"), + }, + { + path: "heapdump", + component: () => import("@/views/sync/HeapDump.vue"), + }, + { + path: "vmtool", + component: () => import("@/views/sync/Vmtool.vue"), + }, + { + path: "reset", + component: () => import("@/views/sync/Reset.vue"), + }, + { + path: "/synchronize/synchronize", + redirect: "", + },{ + path:"ognl", + component:()=>import("@/views/sync/Ognl.vue") + },{ + path:"classInfo", + component:()=>import("@/views/sync/ClassInfo.vue") + } + ], + }, + { + path: "/asynchronize", + component: () => import("@/views/Asynchronize.vue"), + children: [ + { + path: "", + redirect: "/asynchronize/stack", + }, + { + path: "tt", + component: () => import("@/views/async/Tt.vue"), + }, + { + path: "ptofiler", + component: () => import("@/views/async/Profiler.vue"), + }, + { + path: "stack", + component: () => import("@/views/async/Stack.vue"), + }, + { + path: "monitor", + component: () => import("@/views/async/Monitor.vue"), + }, + { + path: "trace", + component: () => import("@/views/async/Trace.vue"), + }, + { + path: "watch", + component: () => import("@/views/async/Watch.vue"), + }, + { + path: "profiler", + component: ()=>import("@/views/async/Profiler.vue") + } + ], + }, +]; +export default routes; diff --git a/web-ui/arthasWebConsole/ui/src/stores/fetch.ts b/web-ui/arthasWebConsole/ui/src/stores/fetch.ts new file mode 100644 index 000000000..2955c20a4 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/stores/fetch.ts @@ -0,0 +1,273 @@ +import { useInterpret, useMachine } from "@xstate/vue"; +import { defineStore } from "pinia"; +import { watchEffect } from "vue"; +import { publicStore } from "./public"; +import { waitFor } from "xstate/lib/waitFor"; +import { interpret } from "xstate"; +import permachine from "@/machines/perRequestMachine"; +// 控制fetch的store +const getEffect = ( + M: ReturnType, + fn: (res: ArthasRes) => void, +) => + watchEffect(() => { + // console.dir(M.state.value.context.response) + if (M.state.value.context.response) { + const response = M.state.value.context.response; + //防止触发额外的副作用,因为输入时context会改变,导致多执行一次effect。。。 + M.state.value.context.response = undefined; + fn(response as ArthasRes); + } + }); +type Machine = ReturnType; +type MachineService = ReturnType; +type PollingLoop = { + open(): void; + close(): void; + isOn(): boolean; + invoke(): void; +}; +const nullLoop: PollingLoop = { + open() {}, + close() {}, + isOn() { + return false; + }, + invoke() {}, +}; +export const fetchStore = defineStore("fetch", { + state: () => ({ + sessionId: "", + consumerId: "", + requestId: "", + online: false, + wait: false, + /** + * 需要给status计数,不然interupt自动关闭很容易出问题 + */ + statusZeroCount: 0, + // 所有用pollingLoop都要 + jobRunning: false, + // 对于 pullresults可能会拉同一个结果很多次 + jobIdSet: new Set(), + //由于轮询只会轮询一个命令,可以直接挂载当前的轮询机 + curPolling: nullLoop, + }), + getters: { + getRequest: (state) => + (option: ArthasReq) => { + /** + * 对于never,就直接赋值为"", + * 对于undefined, 就使用全局默认值 + * 对于定义的字符串,则使用定义的值 + * @param key + * @returns + */ + const trans = (key: "sessionId" | "requestId" | "consumerId") => { + if (key in option) { + //@ts-ignore + if (option[key] !== undefined) { + //@ts-ignore + return option[key]; + } else { + return state[key]; + } + } + return ""; + }; + let sessionId = trans("sessionId"); + let requestId = trans("requestId"); + let consumerId = trans("consumerId"); + const req = new Request("/api", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + ...option, + sessionId, + consumerId, + requestId, + // 若上面三个属性不传,直接用 as any而不是传undefined + }), + }); + return req; + }, + }, + actions: { + getPollingLoop( + hander: Function, + options: { step?: number; globalIntrupt?: boolean } = { + step: 1000, + globalIntrupt: false, + }, + ) { + let id = -1; + const { step, globalIntrupt } = options; + const that = this; + const pollingLoop = { + // 自动轮询的可能会被错误打断 + open() { + if (!this.isOn()) { + if (globalIntrupt) that.jobRunning = true; + hander(); + id = setInterval( + (() => { + if ( + //isErr是瞬时的,点击了就会变回去。。。 + publicStore().isErr || (!that.jobRunning && globalIntrupt) + ) { + this.close(); + } else { + hander(); + } + }) as TimerHandler, + step, + ); + } + }, + close() { + if (this.isOn()) { + //用于自动可自动打断,但是要加计时器 + if (globalIntrupt) that.jobRunning = false; + clearInterval(id); + id = -1; + } + }, + isOn() { + return id !== -1; + }, + /** + * 无条件调用传入的hander + */ + invoke() { + hander(); + }, + }; + this.curPolling = pollingLoop; + return pollingLoop; + }, + pullResultsLoop(pollingM: Machine,globalIntrupt:boolean=true) { + return this.getPollingLoop( + () => { + pollingM.send({ + type: "SUBMIT", + value: { + action: "pull_results", + sessionId: undefined, + consumerId: undefined, + }, + }); + }, + { + globalIntrupt, + }, + ); + }, + onWait() { + if (!this.wait) this.wait = true; + }, + waitDone() { + if (this.wait) this.wait = false; + }, + getCommonResEffect(M: Machine, fn: (body: CommonRes["body"]) => void) { + return getEffect(M, (res) => { + if (Object.hasOwn(res, "body")) { + fn((res as CommonRes).body); + } + }); + }, + /** + * 注入enhancer:Proxy> + */ + getPullResultsEffect( + M: Machine, + fn: (result: ArthasResResult) => void, + ) { + return this.getCommonResEffect(M, (body: CommonRes["body"]) => { + if (body.results.length > 0) { + body.results.forEach((result) => { + // 对于既不是状态形状 + // console.dir(result) + // if(result.type !=="status") { + // console.log("st",result.jobId) + // if(!this.jobIdSet.has(result.jobId.toString())) { + // 错误已经在machine那里拦截了 + fn(result); + // this.jobIdSet.add(result.jobId.toString()) + // } + // } + }); + } + }); + }, + interruptJob() { + if (this.jobRunning) { + // 先不管先后端同步的问题 + // dashboard可能会寄 + this.jobRunning = false; + return this.baseSubmit(interpret(permachine), { + action: "interrupt_job", + sessionId: undefined, + }); + } + this.jobRunning = false; + return Promise.reject("There art not job running"); + }, + openJobRun() { + this.jobRunning = true; + }, + isResult(m: MachineService) { + return waitFor(m, (state) => { + return state.hasTag("result"); + }); + }, + tranOgnl(s: string): string[] { + return s.replace(/\r\n\tat/g, "\r\n\t@").split("\r\n\t"); + }, + /** + * @param fetchM 传入的服务 + * @param value 传入的请求 + * @returns 待处理的promise + * 貌似不支持这样的类型推断,会出现分布式计算...以后想办法处理 + */ + baseSubmit(fetchM: MachineService, value: T["req"]) { + //防止在polling时触发其他命令 + if (this.jobRunning) return Promise.reject("there are jobs on running"); + fetchM.start(); + fetchM.send("INIT"); + fetchM.send({ + type: "SUBMIT", + value, + }); + return this.isResult(fetchM).then( + (state) => { + if (state.matches("success")) { + return Promise.resolve(state.context.response); + } else { + return Promise.reject("ERROR"); + } + }, + (err) => { + return Promise.reject(err); + }, + ); + }, + initSession() { + return this.baseSubmit(interpret(permachine), { + action: "init_session", + }); + }, + asyncInit() { + if (!this.online) { + publicStore().ignore = true; + return this.initSession().then((res) => { + publicStore().ignore = false; + return Promise.resolve(res); + }, (err) => { + publicStore().ignore = false; + return Promise.reject(err); + }); + } + return Promise.resolve("alrealy init"); + }, + }, +}); diff --git a/web-ui/arthasWebConsole/ui/src/stores/public.ts b/web-ui/arthasWebConsole/ui/src/stores/public.ts new file mode 100644 index 000000000..6a19412ca --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/stores/public.ts @@ -0,0 +1,101 @@ +import { defineStore } from "pinia"; +import { Ref, ref, watch, watchEffect } from "vue"; +import { useMachine } from "@xstate/vue"; + +const getEffect = ( + M: ReturnType, + fn: (res: ArthasRes) => void, +) => + watchEffect(() => { + if (M.state.value.context.response) { + const response = M.state.value.context.response; + fn(response as ArthasRes); + } + }); + +export const publicStore = defineStore("public", { // Public项目唯一id + state: () => ({ + userMsg: {}, + // 当初设计不好,应该写成setter,loop的意外错误关闭得挂到errdialog了。。。 + isErr: false, + /** + * isInput 是对input组件的锁,要使用inputVal,调用inputval的组件还要自定义一个锁 + */ + isInput: false, + inputVal: "", + ErrMessage: "bug!!!", + isSuccess: false, + SuccessMessage: "bug!!!", + isWarn: false, + warnMessage: "", + warningFn: () => {}, + /** + * 忽略弹窗 + */ + ignore: false, + }), + getters: { + getUserMsg: (state) => { + return state.userMsg; + }, + }, + actions: { + getCommonResEffect: ( + M: ReturnType, + fn: (body: CommonRes["body"]) => void, + ) => { + return getEffect(M, (res) => { + if (Object.hasOwn(res, "body")) { + fn((res as CommonRes).body); + } + }); + }, + interruptJob(M: ReturnType) { + M.send({ + type: "SUBMIT", + value: { + action: "interrupt_job", + } as AsyncReq, + }); + }, + /** + * + * @param inputRef 组件提供的值的存储区 + * @param getVal 从inputRef到全局缓冲区的处理流程 + * @param setVal 冲缓冲区到inputRef的处理流程 + * @returns 独占缓冲区函数 + */ + inputDialogFactory( + inputRef: Ref, + getVal: (raw: string) => T, + setVal: (input: Ref) => string, + ) { + // 初始化一个响应式的锁 + let mutex = ref(false); + // 发布订阅模式,把函数的闭包里的mutex和缓冲区的锁注册到vue上 + watchEffect(() => { + if (mutex.value && !this.isInput) { + //先上锁,防止再次触发该副作用 + mutex.value = false; + // 把缓冲区的值输入到需要使用的组件里 + inputRef.value = getVal(this.inputVal); + // 清空缓冲区 + this.inputVal = ""; + } + }); + return () => { + this.$patch({ + // 打开缓冲区 + isInput: true, + // 把当前值导入到缓冲区 + inputVal: setVal(inputRef), + }); + // 解锁 + mutex.value = true; + }; + }, + nanoToMillis(nanoSeconds: number): number { + return nanoSeconds / 1000000; + }, + }, +}); diff --git a/web-ui/arthasWebConsole/ui/src/stores/resTransform.ts b/web-ui/arthasWebConsole/ui/src/stores/resTransform.ts new file mode 100644 index 000000000..4a4a4989e --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/stores/resTransform.ts @@ -0,0 +1,9 @@ +import { defineStore } from "pinia"; + +export const transfromStore = defineStore("transformStore", { + actions: { + transformStackTrace(trace: StackTrace) { + return `${trace.className}.${trace.methodName} (${trace.fileName}: ${trace.lineNumber})`; + }, + }, +}); diff --git a/web-ui/arthasWebConsole/ui/src/views/Asynchronize.vue b/web-ui/arthasWebConsole/ui/src/views/Asynchronize.vue new file mode 100644 index 000000000..4a1a0a55e --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/Asynchronize.vue @@ -0,0 +1,35 @@ + + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/views/Config.vue b/web-ui/arthasWebConsole/ui/src/views/Config.vue new file mode 100644 index 000000000..c14a27238 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/Config.vue @@ -0,0 +1,179 @@ + + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/views/Console.vue b/web-ui/arthasWebConsole/ui/src/views/Console.vue new file mode 100644 index 000000000..8c565374e --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/Console.vue @@ -0,0 +1,50 @@ + + + + +· \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/views/DashBoard.vue b/web-ui/arthasWebConsole/ui/src/views/DashBoard.vue new file mode 100644 index 000000000..06377ed89 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/DashBoard.vue @@ -0,0 +1,497 @@ + + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/views/Synchronize.vue b/web-ui/arthasWebConsole/ui/src/views/Synchronize.vue new file mode 100644 index 000000000..4c122dd85 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/Synchronize.vue @@ -0,0 +1,51 @@ + + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/views/async/Monitor.vue b/web-ui/arthasWebConsole/ui/src/views/async/Monitor.vue new file mode 100644 index 000000000..3056989e1 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/async/Monitor.vue @@ -0,0 +1,348 @@ + + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/views/async/Profiler.vue b/web-ui/arthasWebConsole/ui/src/views/async/Profiler.vue new file mode 100644 index 000000000..0af9ab90d --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/async/Profiler.vue @@ -0,0 +1,250 @@ + + + diff --git a/web-ui/arthasWebConsole/ui/src/views/async/Stack.vue b/web-ui/arthasWebConsole/ui/src/views/async/Stack.vue new file mode 100644 index 000000000..c77b669fc --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/async/Stack.vue @@ -0,0 +1,120 @@ + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/views/async/Trace.vue b/web-ui/arthasWebConsole/ui/src/views/async/Trace.vue new file mode 100644 index 000000000..aac3ba7c3 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/async/Trace.vue @@ -0,0 +1,178 @@ + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/views/async/Tt.vue b/web-ui/arthasWebConsole/ui/src/views/async/Tt.vue new file mode 100644 index 000000000..fdc49ad6c --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/async/Tt.vue @@ -0,0 +1,367 @@ + + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/views/async/Watch.vue b/web-ui/arthasWebConsole/ui/src/views/async/Watch.vue new file mode 100644 index 000000000..a3c23e8d2 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/async/Watch.vue @@ -0,0 +1,245 @@ + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/views/sync/ClassInfo.vue b/web-ui/arthasWebConsole/ui/src/views/sync/ClassInfo.vue new file mode 100644 index 000000000..a9c0ed07b --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/sync/ClassInfo.vue @@ -0,0 +1,175 @@ + + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/views/sync/ClassLoader.vue b/web-ui/arthasWebConsole/ui/src/views/sync/ClassLoader.vue new file mode 100644 index 000000000..98e376bcd --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/sync/ClassLoader.vue @@ -0,0 +1,422 @@ + + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/views/sync/HeapDump.vue b/web-ui/arthasWebConsole/ui/src/views/sync/HeapDump.vue new file mode 100644 index 000000000..f43814d3b --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/sync/HeapDump.vue @@ -0,0 +1,71 @@ + + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/views/sync/Jad.vue b/web-ui/arthasWebConsole/ui/src/views/sync/Jad.vue new file mode 100644 index 000000000..f2827e897 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/sync/Jad.vue @@ -0,0 +1,58 @@ + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/views/sync/Mbean.vue b/web-ui/arthasWebConsole/ui/src/views/sync/Mbean.vue new file mode 100644 index 000000000..809ad1d6e --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/sync/Mbean.vue @@ -0,0 +1,148 @@ + + + diff --git a/web-ui/arthasWebConsole/ui/src/views/sync/Memory.vue b/web-ui/arthasWebConsole/ui/src/views/sync/Memory.vue new file mode 100644 index 000000000..a9249b92d --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/sync/Memory.vue @@ -0,0 +1,55 @@ + + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/views/sync/Ognl.vue b/web-ui/arthasWebConsole/ui/src/views/sync/Ognl.vue new file mode 100644 index 000000000..42689c3df --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/sync/Ognl.vue @@ -0,0 +1,84 @@ + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/views/sync/Reset.vue b/web-ui/arthasWebConsole/ui/src/views/sync/Reset.vue new file mode 100644 index 000000000..b5306f6ed --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/sync/Reset.vue @@ -0,0 +1,32 @@ + + + diff --git a/web-ui/arthasWebConsole/ui/src/views/sync/Retransform.vue b/web-ui/arthasWebConsole/ui/src/views/sync/Retransform.vue new file mode 100644 index 000000000..b27479d8c --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/sync/Retransform.vue @@ -0,0 +1,92 @@ + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/views/sync/Thread.vue b/web-ui/arthasWebConsole/ui/src/views/sync/Thread.vue new file mode 100644 index 000000000..8f46b44d2 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/sync/Thread.vue @@ -0,0 +1,292 @@ + + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/ui/src/views/sync/Vmtool.vue b/web-ui/arthasWebConsole/ui/src/views/sync/Vmtool.vue new file mode 100644 index 000000000..840902282 --- /dev/null +++ b/web-ui/arthasWebConsole/ui/src/views/sync/Vmtool.vue @@ -0,0 +1,110 @@ + + + + + \ No newline at end of file diff --git a/web-ui/arthasWebConsole/vite.config.ts b/web-ui/arthasWebConsole/vite.config.ts new file mode 100644 index 000000000..ee1e85280 --- /dev/null +++ b/web-ui/arthasWebConsole/vite.config.ts @@ -0,0 +1,41 @@ +import { defineConfig } from "vite"; +import vue from "@vitejs/plugin-vue"; +import * as path from "path"; +import { resolve } from "path"; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [vue({ + reactivityTransform: path.resolve(__dirname, "./ui"), + })], + // root:path.resolve(__dirname,"src"), + resolve: { + alias: { + "@": path.resolve(__dirname, "./ui/src/") + }, + }, + build: { + emptyOutDir:true, + rollupOptions: { + input: { + main: path.resolve(__dirname, "index.html"), + ui: path.resolve(__dirname, "ui/index.html"), + }, + + output:{ + chunkFileNames: 'static/js/[name]-[hash].js', + entryFileNames:'static/js/[name]-[hash].js', + assetFileNames:'static/[ext]/[name]-[hash].[ext]' + } + }, + }, + base: "/", + server: { + proxy: { + "/api": { + target: "http://127.0.0.1:8563", + changeOrigin: true, + }, + }, + }, +}); diff --git a/web-ui/arthasWebConsole/yarn.lock b/web-ui/arthasWebConsole/yarn.lock new file mode 100644 index 000000000..ad0eec9dd --- /dev/null +++ b/web-ui/arthasWebConsole/yarn.lock @@ -0,0 +1,3575 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/parser@^7.16.4": + version "7.18.9" + resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.18.9.tgz" + integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== + +"@gar/promisify@^1.1.3": + version "1.1.3" + resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@headlessui/vue@^1.6.6": + version "1.6.7" + resolved "https://registry.npmmirror.com/@headlessui/vue/-/vue-1.6.7.tgz" + integrity sha512-5sTCBpkUoFE7zhANn/6Z+pf3PUA7MD6BBaTsJcQybq9E4fnNiMM9agOJI9meXbtcawE6Dm8EeB5A8HAJEnZCbQ== + +"@heroicons/vue@^1.0.6": + version "1.0.6" + resolved "https://registry.npmjs.org/@heroicons/vue/-/vue-1.0.6.tgz#d8b90734b436eb5a87f40cc300b64a0fb0031f7f" + integrity sha512-ng2YcCQrdoQWEFpw+ipFl2rZo8mZ56v0T5+MyfQQvNqfKChwgP6DMloZLW+rl17GEcHkE3H82UTAMKBKZr4+WA== + +"@highlightjs/vue-plugin@^2.1.0": + version "2.1.0" + resolved "https://registry.npmmirror.com/@highlightjs/vue-plugin/-/vue-plugin-2.1.0.tgz#b7c41e3597a46975665b10cad57882cbde1d1594" + integrity sha512-E+bmk4ncca+hBEYRV2a+1aIzIV0VSY/e5ArjpuSN9IO7wBJrzUE2u4ESCwrbQD7sAy+jWQjkV5qCCWgc+pu7CQ== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@npmcli/fs@^2.1.0": + version "2.1.2" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== + dependencies: + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + +"@npmcli/git@^3.0.0": + version "3.0.2" + resolved "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz#5c5de6b4d70474cf2d09af149ce42e4e1dacb931" + integrity sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w== + dependencies: + "@npmcli/promise-spawn" "^3.0.0" + lru-cache "^7.4.4" + mkdirp "^1.0.4" + npm-pick-manifest "^7.0.0" + proc-log "^2.0.0" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^2.0.2" + +"@npmcli/installed-package-contents@^1.0.7": + version "1.0.7" + resolved "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" + integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== + dependencies: + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + +"@npmcli/move-file@^2.0.0": + version "2.0.1" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@npmcli/node-gyp@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" + integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== + +"@npmcli/promise-spawn@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" + integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== + dependencies: + infer-owner "^1.0.4" + +"@npmcli/run-script@^4.1.0": + version "4.2.1" + resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz#c07c5c71bc1c70a5f2a06b0d4da976641609b946" + integrity sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg== + dependencies: + "@npmcli/node-gyp" "^2.0.0" + "@npmcli/promise-spawn" "^3.0.0" + node-gyp "^9.0.0" + read-package-json-fast "^2.0.3" + which "^2.0.2" + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@types/node@^18.7.2": + version "18.7.2" + resolved "https://registry.npmmirror.com/@types/node/-/node-18.7.2.tgz" + integrity sha512-ce7MIiaYWCFv6A83oEultwhBXb22fxwNOQf5DIxWA4WXvDQ7K+L0fbWl/YOfCzlR5B/uFkSnVBhPcOfOECcWvA== + +"@vitejs/plugin-vue@^2.3.3": + version "2.3.3" + resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-2.3.3.tgz" + integrity sha512-SmQLDyhz+6lGJhPELsBdzXGc+AcaT8stgkbiTFGpXPe8Tl1tJaBw1A6pxDqDuRsVkD8uscrkx3hA7QDOoKYtyw== + +"@volar/code-gen@0.34.17": + version "0.34.17" + resolved "https://registry.npmmirror.com/@volar/code-gen/-/code-gen-0.34.17.tgz" + integrity sha512-rHR7BA71BJ/4S7xUOPMPiB7uk6iU9oTWpEMZxFi5VGC9iJmDncE82WzU5iYpcbOBCVHsOjMh0+5CGMgdO6SaPA== + dependencies: + "@volar/source-map" "0.34.17" + +"@volar/source-map@0.34.17": + version "0.34.17" + resolved "https://registry.npmmirror.com/@volar/source-map/-/source-map-0.34.17.tgz" + integrity sha512-3yn1IMXJGGWB/G817/VFlFMi8oh5pmE7VzUqvgMZMrppaZpKj6/juvJIEiXNxRsgWc0RxIO8OSp4htdPUg1Raw== + +"@volar/vue-code-gen@0.34.17": + version "0.34.17" + resolved "https://registry.npmmirror.com/@volar/vue-code-gen/-/vue-code-gen-0.34.17.tgz" + integrity sha512-17pzcK29fyFWUc+C82J3JYSnA+jy3QNrIldb9kPaP9Itbik05ZjEIyEue9FjhgIAuHeYSn4LDM5s6nGjxyfhsQ== + dependencies: + "@volar/code-gen" "0.34.17" + "@volar/source-map" "0.34.17" + "@vue/compiler-core" "^3.2.36" + "@vue/compiler-dom" "^3.2.36" + "@vue/shared" "^3.2.36" + +"@volar/vue-typescript@0.34.17": + version "0.34.17" + resolved "https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-0.34.17.tgz" + integrity sha512-U0YSVIBPRWVPmgJHNa4nrfq88+oS+tmyZNxmnfajIw9A/GOGZQiKXHC0k09SVvbYXlsjgJ6NIjhm9NuAhGRQjg== + dependencies: + "@volar/code-gen" "0.34.17" + "@volar/source-map" "0.34.17" + "@volar/vue-code-gen" "0.34.17" + "@vue/compiler-sfc" "^3.2.36" + "@vue/reactivity" "^3.2.36" + +"@vue/compiler-core@3.2.37", "@vue/compiler-core@^3.2.36": + version "3.2.37" + resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.37.tgz" + integrity sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg== + dependencies: + "@babel/parser" "^7.16.4" + "@vue/shared" "3.2.37" + estree-walker "^2.0.2" + source-map "^0.6.1" + +"@vue/compiler-dom@3.2.37", "@vue/compiler-dom@^3.2.36": + version "3.2.37" + resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz" + integrity sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ== + dependencies: + "@vue/compiler-core" "3.2.37" + "@vue/shared" "3.2.37" + +"@vue/compiler-sfc@3.2.37", "@vue/compiler-sfc@^3.2.36": + version "3.2.37" + resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz" + integrity sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg== + dependencies: + "@babel/parser" "^7.16.4" + "@vue/compiler-core" "3.2.37" + "@vue/compiler-dom" "3.2.37" + "@vue/compiler-ssr" "3.2.37" + "@vue/reactivity-transform" "3.2.37" + "@vue/shared" "3.2.37" + estree-walker "^2.0.2" + magic-string "^0.25.7" + postcss "^8.1.10" + source-map "^0.6.1" + +"@vue/compiler-ssr@3.2.37": + version "3.2.37" + resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz" + integrity sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw== + dependencies: + "@vue/compiler-dom" "3.2.37" + "@vue/shared" "3.2.37" + +"@vue/devtools-api@^6.1.4", "@vue/devtools-api@^6.2.1": + version "6.2.1" + resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.2.1.tgz" + integrity sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ== + +"@vue/reactivity-transform@3.2.37": + version "3.2.37" + resolved "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz" + integrity sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg== + dependencies: + "@babel/parser" "^7.16.4" + "@vue/compiler-core" "3.2.37" + "@vue/shared" "3.2.37" + estree-walker "^2.0.2" + magic-string "^0.25.7" + +"@vue/reactivity@3.2.37", "@vue/reactivity@^3.2.36": + version "3.2.37" + resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.37.tgz" + integrity sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A== + dependencies: + "@vue/shared" "3.2.37" + +"@vue/runtime-core@3.2.37": + version "3.2.37" + resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz" + integrity sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ== + dependencies: + "@vue/reactivity" "3.2.37" + "@vue/shared" "3.2.37" + +"@vue/runtime-dom@3.2.37": + version "3.2.37" + resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz" + integrity sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw== + dependencies: + "@vue/runtime-core" "3.2.37" + "@vue/shared" "3.2.37" + csstype "^2.6.8" + +"@vue/server-renderer@3.2.37": + version "3.2.37" + resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.37.tgz" + integrity sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA== + dependencies: + "@vue/compiler-ssr" "3.2.37" + "@vue/shared" "3.2.37" + +"@vue/shared@3.2.37", "@vue/shared@^3.2.36": + version "3.2.37" + resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.37.tgz" + integrity sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw== + +"@xstate/vue@^2.0.0": + version "2.0.0" + resolved "https://registry.npmmirror.com/@xstate/vue/-/vue-2.0.0.tgz" + integrity sha512-JlrJ3d+I6rZCcFBuu3O4GP+mGJfd11O9o69wRedzPMqZ+hxcMRBsih9L5kKnJHcU9CTmdJTT172oxTaYF7thzA== + +abbrev@1: + version "1.1.1" + resolved "https://registry.npmmirror.com/abbrev/-/abbrev-1.1.1.tgz" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +acorn-node@^1.8.2: + version "1.8.2" + resolved "https://registry.npmmirror.com/acorn-node/-/acorn-node-1.8.2.tgz" + integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== + dependencies: + acorn "^7.0.0" + acorn-walk "^7.0.0" + xtend "^4.0.2" + +acorn-walk@^7.0.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-7.2.0.tgz" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^7.0.0: + version "7.4.1" + resolved "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +address@>=0.0.1: + version "1.2.1" + resolved "https://registry.npmjs.org/address/-/address-1.2.1.tgz#25bb61095b7522d65b357baa11bc05492d4c8acd" + integrity sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA== + +agent-base@2: + version "2.1.1" + resolved "https://registry.npmmirror.com/agent-base/-/agent-base-2.1.1.tgz" + integrity sha512-oDtZV740o3fr5oJtPLOsgH2hl2TRPscNXIx4VzzBwVlXVkv8RHm7XXqGAYg8t20+Gwu6LNDnx8HRMGqVGPZ8Vw== + dependencies: + extend "~3.0.0" + semver "~5.0.1" + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/ansi-align/-/ansi-align-2.0.0.tgz" + integrity sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA== + dependencies: + string-width "^2.0.0" + +ansi-escapes@^1.0.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz" + integrity sha512-wiXutNjDUlNEDWHcYH3jtZUhd3c4/VojassD8zHdHCY13xbZy2XbW+NKQwA0tWGBVzDA9qEzYwfoSsWmviidhw== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.1.tgz" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-2.2.1.tgz" + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +any-promise@^1.0.0, any-promise@^1.1.0, any-promise@^1.3.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/archy/-/archy-1.0.0.tgz" + integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +arg@^5.0.2: + version "5.0.2" + resolved "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +array-uniq@^1.0.2: + version "1.0.3" + resolved "https://registry.npmmirror.com/array-uniq/-/array-uniq-1.0.3.tgz" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +autoprefixer@^10.4.7: + version "10.4.8" + resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.8.tgz" + integrity sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw== + dependencies: + browserslist "^4.21.3" + caniuse-lite "^1.0.30001373" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +await-event@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/await-event/-/await-event-2.1.0.tgz#78e9f92684bae4022f9fa0b5f314a11550f9aa76" + integrity sha512-hADm2dFnyugZnfFoJ0Oug2T9xAT2gFdvxZXXnWUOFsHL+VTCvj4Q7oBOinUYzvAFeAD5HN1YSrP78iS3/SQ7iQ== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +bin-links@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/bin-links/-/bin-links-2.3.0.tgz#1ff241c86d2c29b24ae52f49544db5d78a4eb967" + integrity sha512-JzrOLHLwX2zMqKdyYZjkDgQGT+kHDkIhv2/IK2lJ00qLxV4TmFoHi8drDBb6H5Zrz1YfgHkai4e2MGPqnoUhqA== + dependencies: + cmd-shim "^4.0.1" + mkdirp-infer-owner "^2.0.0" + npm-normalize-package-bin "^1.0.0" + read-cmd-shim "^2.0.0" + rimraf "^3.0.0" + write-file-atomic "^3.0.3" + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +binary-mirror-config@^1.19.0: + version "1.41.0" + resolved "https://registry.npmjs.org/binary-mirror-config/-/binary-mirror-config-1.41.0.tgz#b68032588392bee9262971f977922d075513964b" + integrity sha512-ZiIhR1s6Sv1Fv6qCQqfPjx0Cj86BgFlhqNxZgHkQOWcxJcMbO3mj1iqsuVjowYqJqeZL8e52+IEv7IRnSX6T6w== + +bluebird@^3.1.1: + version "3.7.2" + resolved "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bootstrap@4.6.2: + version "4.6.2" + resolved "https://registry.npmmirror.com/bootstrap/-/bootstrap-4.6.2.tgz#8e0cd61611728a5bf65a3a2b8d6ff6c77d5d7479" + integrity sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ== + +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.npmmirror.com/boxen/-/boxen-1.3.0.tgz" + integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.21.3: + version "4.21.3" + resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.3.tgz" + integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== + dependencies: + caniuse-lite "^1.0.30001370" + electron-to-chromium "^1.4.202" + node-releases "^2.0.6" + update-browserslist-db "^1.0.5" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== + +builtins@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + +bytes@^3.1.0: + version "3.1.2" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^16.0.0, cacache@^16.1.0: + version "16.1.3" + resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^2.0.0" + +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +camelcase@^4.0.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/camelcase/-/camelcase-4.1.0.tgz" + integrity sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw== + +caniuse-lite@^1.0.30001370, caniuse-lite@^1.0.30001373: + version "1.0.30001373" + resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz" + integrity sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ== + +capture-stack-trace@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz" + integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== + +chalk@^1.0.0: + version "1.1.3" + resolved "https://registry.npmmirror.com/chalk/-/chalk-1.1.3.tgz" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.npmmirror.com/ci-info/-/ci-info-1.6.0.tgz" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/cli-boxes/-/cli-boxes-1.0.0.tgz" + integrity sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg== + +cli-cursor@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-1.0.2.tgz" + integrity sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A== + dependencies: + restore-cursor "^1.0.1" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.2.0: + version "2.7.0" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" + integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== + +cli-truncate@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-1.1.0.tgz" + integrity sha512-bAtZo0u82gCfaAGfSNxUdTI9mNyza7D8w4CVCcaOsy7sgwDzvx6ekr6cuWJqY3UGzgnQ1+4wgENup5eIhgxEYA== + dependencies: + slice-ansi "^1.0.0" + string-width "^2.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +cmd-shim-hotfix@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/cmd-shim-hotfix/-/cmd-shim-hotfix-3.0.3.tgz#f46a073b74538199330683ad985a5912f8430dea" + integrity sha512-fn4AxpPZMCSVPvlfA+YJ2A1dR0elTQuwEXF73U91hQkuaDaYKNPz2XsC+driC4zv+avqXFfUty7Y/2KuSuHV2A== + dependencies: + graceful-fs "^4.1.2" + mkdirp "~0.5.0" + +cmd-shim@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz#b3a904a6743e9fede4148c6f3800bf2a08135bdd" + integrity sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw== + dependencies: + mkdirp-infer-owner "^2.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +color@^4.2: + version "4.2.3" + resolved "https://registry.npmjs.org/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + +columnify@^1.5.2: + version "1.6.0" + resolved "https://registry.npmmirror.com/columnify/-/columnify-1.6.0.tgz" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== + dependencies: + strip-ansi "^6.0.1" + wcwidth "^1.0.0" + +combined-stream@^1.0.6: + version "1.0.8" + resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^1.4.7: + version "1.6.2" + resolved "https://registry.npmmirror.com/concat-stream/-/concat-stream-1.6.2.tgz" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +configstore@^3.0.0: + version "3.1.5" + resolved "https://registry.npmmirror.com/configstore/-/configstore-3.1.5.tgz" + integrity sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA== + dependencies: + dot-prop "^4.2.1" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + +console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +copy-to@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5" + integrity sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w== + +core-util-is@^1.0.2, core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.npmmirror.com/create-error-class/-/create-error-class-3.0.2.tgz" + integrity sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw== + dependencies: + capture-stack-trace "^1.0.0" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-5.1.0.tgz" + integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz" + integrity sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg== + +css-selector-tokenizer@^0.8.0: + version "0.8.0" + resolved "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz#88267ef6238e64f2215ea2764b3e2cf498b845dd" + integrity sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg== + dependencies: + cssesc "^3.0.0" + fastparse "^1.1.2" + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +csstype@^2.6.8: + version "2.6.20" + resolved "https://registry.npmmirror.com/csstype/-/csstype-2.6.20.tgz" + integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA== + +daisyui@^2.31.0: + version "2.31.0" + resolved "https://registry.npmjs.org/daisyui/-/daisyui-2.31.0.tgz#906bc447b59c24782320f33fbc990ea1d8c2200c" + integrity sha512-qepRXgQPLNcJ8ZPZy+dUvsC7mRWvMLRcVMe85/wZA60Tnhm/bkidhOzdllL8aAk2JX+W/xlIsTJ8NZFpPm+eyw== + dependencies: + color "^4.2" + css-selector-tokenizer "^0.8.0" + postcss-js "^4.0.0" + tailwindcss "^3" + +debug@2, debug@^2.2.0, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.3: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/deep-extend/-/deep-extend-0.6.0.tgz" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +default-user-agent@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/default-user-agent/-/default-user-agent-1.0.0.tgz#16c46efdcaba3edc45f24f2bd4868b01b7c2adc6" + integrity sha512-bDF7bg6OSNcSwFWPu4zYKpVkJZQYVrAANMYB8bc9Szem1D0yKdm4sa/rOCs2aC9+2GMqQ7KnwtZRvDhmLF0dXw== + dependencies: + os-name "~1.0.3" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/defaults/-/defaults-1.0.3.tgz" + integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA== + dependencies: + clone "^1.0.2" + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/defined/-/defined-1.0.0.tgz" + integrity sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +depd@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +destroy@^1.0.4: + version "1.2.0" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/detect-indent/-/detect-indent-5.0.0.tgz" + integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== + +detect-libc@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" + integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== + +detective@^5.2.1: + version "5.2.1" + resolved "https://registry.npmmirror.com/detective/-/detective-5.2.1.tgz" + integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw== + dependencies: + acorn-node "^1.8.2" + defined "^1.0.0" + minimist "^1.2.6" + +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://registry.npmmirror.com/didyoumean/-/didyoumean-1.2.2.tgz" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + +digest-header@^0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/digest-header/-/digest-header-0.0.1.tgz#11ccf6deec5766ac379744d901c12cba49514be6" + integrity sha512-Qi0KOZgRnkQJuvMWbs1ZRRajEnbsMU8xlJI4rHIbPC+skHQ30heO5cIHpUFT4jAvAe+zPtdavLSAxASqoyZ3cg== + dependencies: + utility "0.1.11" + +dlv@^1.1.3: + version "1.1.3" + resolved "https://registry.npmmirror.com/dlv/-/dlv-1.1.3.tgz" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + +dot-prop@^4.2.1: + version "4.2.1" + resolved "https://registry.npmmirror.com/dot-prop/-/dot-prop-4.2.1.tgz" + integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== + dependencies: + is-obj "^1.0.0" + +duplexer3@^0.1.4: + version "0.1.5" + resolved "https://registry.npmmirror.com/duplexer3/-/duplexer3-0.1.5.tgz" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + +echarts@^5.3.3: + version "5.3.3" + resolved "https://registry.npmmirror.com/echarts/-/echarts-5.3.3.tgz" + integrity sha512-BRw2serInRwO5SIwRviZ6Xgm5Lb7irgz+sLiFMmy/HOaf4SQ+7oYqxKzRHAKp4xHQ05AuHw1xvoQWJjDQq/FGw== + dependencies: + tslib "2.3.0" + zrender "5.3.2" + +electron-to-chromium@^1.4.202: + version "1.4.206" + resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.206.tgz" + integrity sha512-h+Fadt1gIaQ06JaIiyqPsBjJ08fV5Q7md+V8bUvQW/9OvXfL2LRICTz2EcnnCP7QzrFTS6/27MRV6Bl9Yn97zA== + +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz" + integrity sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +esbuild-android-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.51.tgz#414a087cb0de8db1e347ecca6c8320513de433db" + integrity sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ== + +esbuild-android-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.51.tgz#55de3bce2aab72bcd2b606da4318ad00fb9c8151" + integrity sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A== + +esbuild-darwin-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.51.tgz#4259f23ed6b4cea2ec8a28d87b7fb9801f093754" + integrity sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA== + +esbuild-darwin-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.51.tgz#d77b4366a71d84e530ba019d540b538b295d494a" + integrity sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow== + +esbuild-freebsd-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.51.tgz#27b6587b3639f10519c65e07219d249b01f2ad38" + integrity sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g== + +esbuild-freebsd-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.51.tgz#63c435917e566808c71fafddc600aca4d78be1ec" + integrity sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg== + +esbuild-linux-32@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.51.tgz#c3da774143a37e7f11559b9369d98f11f997a5d9" + integrity sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w== + +esbuild-linux-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.51.tgz#5d92b67f674e02ae0b4a9de9a757ba482115c4ae" + integrity sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA== + +esbuild-linux-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.51.tgz#dac84740516e859d8b14e1ecc478dd5241b10c93" + integrity sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw== + +esbuild-linux-arm@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.51.tgz#b3ae7000696cd53ed95b2b458554ff543a60e106" + integrity sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg== + +esbuild-linux-mips64le@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.51.tgz#dad10770fac94efa092b5a0643821c955a9dd385" + integrity sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A== + +esbuild-linux-ppc64le@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.51.tgz#b68c2f8294d012a16a88073d67e976edd4850ae0" + integrity sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ== + +esbuild-linux-riscv64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.51.tgz#608a318b8697123e44c1e185cdf6708e3df50b93" + integrity sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA== + +esbuild-linux-s390x@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.51.tgz#c9e7791170a3295dba79b93aa452beb9838a8625" + integrity sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw== + +esbuild-netbsd-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.51.tgz#0abd40b8c2e37fda6f5cc41a04cb2b690823d891" + integrity sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A== + +esbuild-openbsd-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz#4adba0b7ea7eb1428bb00d8e94c199a949b130e8" + integrity sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA== + +esbuild-sunos-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz#4b8a6d97dfedda30a6e39607393c5c90ebf63891" + integrity sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA== + +esbuild-windows-32@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.51.tgz#d31d8ca0c1d314fb1edea163685a423b62e9ac17" + integrity sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg== + +esbuild-windows-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz" + integrity sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA== + +esbuild-windows-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.51.tgz#0220d2304bfdc11bc27e19b2aaf56edf183e4ae9" + integrity sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g== + +esbuild@^0.14.27: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.14.51.tgz" + integrity sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw== + optionalDependencies: + esbuild-android-64 "0.14.51" + esbuild-android-arm64 "0.14.51" + esbuild-darwin-64 "0.14.51" + esbuild-darwin-arm64 "0.14.51" + esbuild-freebsd-64 "0.14.51" + esbuild-freebsd-arm64 "0.14.51" + esbuild-linux-32 "0.14.51" + esbuild-linux-64 "0.14.51" + esbuild-linux-arm "0.14.51" + esbuild-linux-arm64 "0.14.51" + esbuild-linux-mips64le "0.14.51" + esbuild-linux-ppc64le "0.14.51" + esbuild-linux-riscv64 "0.14.51" + esbuild-linux-s390x "0.14.51" + esbuild-netbsd-64 "0.14.51" + esbuild-openbsd-64 "0.14.51" + esbuild-sunos-64 "0.14.51" + esbuild-windows-32 "0.14.51" + esbuild-windows-64 "0.14.51" + esbuild-windows-arm64 "0.14.51" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.npmmirror.com/execa/-/execa-0.7.0.tgz" + integrity sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw== + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.npmmirror.com/exit-hook/-/exit-hook-1.1.1.tgz" + integrity sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg== + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend@3, extend@~3.0.0: + version "3.0.2" + resolved "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +fast-glob@^3.2.11: + version "3.2.11" + resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.11.tgz" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fastparse@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.npmmirror.com/fastq/-/fastq-1.13.0.tgz" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +form-data-encoder@^1.7.2: + version "1.7.2" + resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040" + integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A== + +form-data@^2.0.0: + version "2.5.1" + resolved "https://registry.npmmirror.com/form-data/-/form-data-2.5.1.tgz" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +formdata-node@^4.3.3: + version "4.4.1" + resolved "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz#23f6a5cb9cb55315912cbec4ff7b0f59bbd191e2" + integrity sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ== + dependencies: + node-domexception "1.0.0" + web-streams-polyfill "4.0.0-beta.3" + +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.2.0.tgz" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-minipass@^2.0.0, fs-minipass@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/get-stream/-/get-stream-3.0.0.tgz" + integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.0.1: + version "8.0.3" + resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.npmmirror.com/global-dirs/-/global-dirs-0.1.1.tgz" + integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg== + dependencies: + ini "^1.3.4" + +global@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +got@^6.7.1: + version "6.7.1" + resolved "https://registry.npmmirror.com/got/-/got-6.7.1.tgz" + integrity sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg== + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6, graceful-fs@^4.2.6: + version "4.2.10" + resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/has-ansi/-/has-ansi-2.0.0.tgz" + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/has-unicode/-/has-unicode-2.0.1.tgz" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/has/-/has-1.0.3.tgz" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +highlight.js@^11.6.0: + version "11.6.0" + resolved "https://registry.npmmirror.com/highlight.js/-/highlight.js-11.6.0.tgz#a50e9da05763f1bb0c1322c8f4f755242cff3f5a" + integrity sha512-ig1eqDzJaB0pqEvlPVIpSSyMaO92bH1N2rJpLMN/nX396wTpDA4Eq0uK+7I/2XG17pFaaKE0kjV/XPeGt7Evjw== + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz#9786123f92ef3627f24abc3f15c20d98ec4a6594" + integrity sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q== + dependencies: + lru-cache "^7.5.1" + +http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-proxy-agent@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz" + integrity sha512-6YMslTZtuupu4irnNBi1bM6dG0UqHBHqObHQn3awavmNXe9CGkmw7KZ68EyAnJk3yBlLpbLwux5+bY1lneDFmg== + dependencies: + agent-base "2" + debug "2" + extend "3" + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +https-proxy-agent@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz" + integrity sha512-OZhm7//JDnQthMVqlPAfkZyPO2fMhfHY6gY+jZcX8rLfFiGtHiIQrfD80WvCDHNMQ77Ak3r5CiPRDD2rNzo2OQ== + dependencies: + agent-base "2" + debug "2" + extend "3" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ignore-walk@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" + integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== + dependencies: + minimatch "^5.0.1" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/import-lazy/-/import-lazy-2.1.0.tgz" + integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.4, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +invariant@^2.2.0: + version "2.2.4" + resolved "https://registry.npmmirror.com/invariant/-/invariant-2.2.4.tgz" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + +is-absolute@^0.2.3: + version "0.2.6" + resolved "https://registry.npmmirror.com/is-absolute/-/is-absolute-0.2.6.tgz" + integrity sha512-7Kr05z5LkcOpoMvxHN1PC11WbPabdNFmMYYo0eZvWu3BfVS0T03yoqYDczoCBx17xqk2x1XAZrcKiFVL88jxlQ== + dependencies: + is-relative "^0.2.1" + is-windows "^0.2.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.npmmirror.com/is-ci/-/is-ci-1.2.1.tgz" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-class-hotfix@~0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/is-class-hotfix/-/is-class-hotfix-0.0.6.tgz#a527d31fb23279281dde5f385c77b5de70a72435" + integrity sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ== + +is-core-module@^2.8.1: + version "2.10.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" + integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== + dependencies: + has "^1.0.3" + +is-core-module@^2.9.0: + version "2.9.0" + resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.9.0.tgz" + integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== + dependencies: + has "^1.0.3" + +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz" + integrity sha512-ERNhMg+i/XgDwPIPF3u24qpajVreaiSuvpb1Uu0jugw7KKcxGyCX8cgp8P5fwTmAuXku6beDHHECdKArjlg7tw== + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-npm/-/is-npm-1.0.0.tgz" + integrity sha512-9r39FIr3d+KD9SbX0sfMsHzb5PP3uimOiwr3YupUaUFG4W0l1U57Rx3utpttV7qz5U3jmrO5auUa04LU9pyHsg== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/is-obj/-/is-obj-1.0.1.tgz" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-1.0.1.tgz" + integrity sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g== + dependencies: + path-is-inside "^1.0.1" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-redirect/-/is-redirect-1.0.0.tgz" + integrity sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw== + +is-relative@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/is-relative/-/is-relative-0.2.1.tgz" + integrity sha512-9AMzjRmLqcue629b4ezEVSK6kJsYJlUIhMcygmYORUgwUNJiavHcC3HkaGx0XYpyVKQSOqFbMEZmW42cY87sYw== + dependencies: + is-unc-path "^0.1.1" + +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-stream@^1.0.0, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +is-type-of@^1.1.0: + version "1.2.1" + resolved "https://registry.npmjs.org/is-type-of/-/is-type-of-1.2.1.tgz#e263ec3857aceb4f28c47130ec78db09a920f8c5" + integrity sha512-uK0kyX9LZYhSDS7H2sVJQJop1UnWPWmo5RvR3q2kFH6AUHYs7sOrVg0b4nyBHw29kRRNFofYN/JbHZDlHiItTA== + dependencies: + core-util-is "^1.0.2" + is-class-hotfix "~0.0.6" + isstream "~0.1.2" + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unc-path@^0.1.1: + version "0.1.2" + resolved "https://registry.npmmirror.com/is-unc-path/-/is-unc-path-0.1.2.tgz" + integrity sha512-HhLc5VDMH4pu3oMtIuunz/DFQUIoR561kMME3U3Afhj8b7vH085vkIkemrz1kLXCEIuoMAmO3yVmafWdSbGW8w== + dependencies: + unc-path-regex "^0.1.0" + +is-windows@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/is-windows/-/is-windows-0.2.0.tgz" + integrity sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +jquery@^3.6.1: + version "3.6.1" + resolved "https://registry.npmmirror.com/jquery/-/jquery-3.6.1.tgz#fab0408f8b45fc19f956205773b62b292c147a16" + integrity sha512-opJeO4nCucVnsjiXOE+/PcCgYw9Gwpvs/a6B1LL/lQhwWwpbVEVYDZ1FokFr8PRc7ghYlrFPuyHuiiDNTQxmcw== + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +jspm-config@^0.3.0: + version "0.3.4" + resolved "https://registry.npmmirror.com/jspm-config/-/jspm-config-0.3.4.tgz" + integrity sha512-NuRJyYXOKLNoSPy+jYVt7LUbGmss/wgw2OjmtWrLx5bFxlIQ7Bvbeeo3U2tNHhzbewOikU5YZYS7uYNY/u651w== + dependencies: + any-promise "^1.3.0" + graceful-fs "^4.1.4" + make-error-cause "^1.2.1" + object.pick "^1.1.2" + parse-json "^2.2.0" + strip-bom "^3.0.0" + thenify "^3.2.0" + throat "^3.0.0" + xtend "^4.0.1" + +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/latest-version/-/latest-version-3.1.0.tgz" + integrity sha512-Be1YRHWWlZaSsrz2U+VInk+tO0EwLIyV+23RhWLINJYwg/UIikxjlj3MhH37/6/EDCAusjajvMkMMUXRaMWl/w== + dependencies: + package-json "^4.0.0" + +lilconfig@^2.0.5, lilconfig@^2.0.6: + version "2.0.6" + resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.0.6.tgz" + integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== + +listify@^1.0.0: + version "1.0.3" + resolved "https://registry.npmmirror.com/listify/-/listify-1.0.3.tgz" + integrity sha512-083swF7iH7bx8666zdzBColpgEuy46HjN3r1isD4zV6Ix7FuHfb/2/WVnl4CH8hjuoWeFF7P5KkKNXUnJCFEJg== + +lockfile@^1.0.1: + version "1.0.4" + resolved "https://registry.npmmirror.com/lockfile/-/lockfile-1.0.4.tgz" + integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== + dependencies: + signal-exit "^3.0.2" + +log-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + +log-update@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/log-update/-/log-update-1.0.2.tgz" + integrity sha512-4vSow8gbiGnwdDNrpy1dyNaXWKSCIPop0EHdE8GrnngHoJujM3QhvHUN/igsYCgPoHo7pFOezlJ61Hlln0KHyA== + dependencies: + ansi-escapes "^1.0.0" + cli-cursor "^1.0.2" + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: + version "7.14.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz#21be64954a4680e303a09e9468f880b98a0b3c7f" + integrity sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ== + +magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/make-dir/-/make-dir-1.3.0.tgz" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-error-cause@^1.2.1: + version "1.2.2" + resolved "https://registry.npmmirror.com/make-error-cause/-/make-error-cause-1.2.2.tgz" + integrity sha512-4TO2Y3HkBnis4c0dxhAgD/jprySYLACf7nwN6V0HAHDx59g12WlRpUmFy1bRHamjGUEEBrEvCq6SUpsEE2lhUg== + dependencies: + make-error "^1.2.0" + +make-error@^1.2.0: + version "1.3.6" + resolved "https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: + version "10.2.1" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^16.1.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-fetch "^2.0.3" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^9.0.0" + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.35: + version "2.1.35" + resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== + dependencies: + dom-walk "^0.1.0" + +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.0" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.6.tgz" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^2.0.3: + version "2.1.2" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== + dependencies: + minipass "^3.1.6" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-json-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== + dependencies: + jsonparse "^1.3.1" + minipass "^3.0.0" + +minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^2.6.0, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: + version "3.3.4" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" + integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + dependencies: + yallist "^4.0.0" + +minizlib@^1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +minizlib@^2.1.1, minizlib@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp-infer-owner@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" + integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== + dependencies: + chownr "^2.0.0" + infer-owner "^1.0.4" + mkdirp "^1.0.3" + +mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.0: + version "0.5.6" + resolved "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +moment@^2.24.0: + version "2.29.4" + resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.0.0, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +node-domexception@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + +node-gyp@^9.0.0: + version "9.1.0" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz#c8d8e590678ea1f7b8097511dedf41fc126648f8" + integrity sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^10.0.3" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-homedir@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/node-homedir/-/node-homedir-1.1.1.tgz#736db0b60e3bba8aba68df9927de40a7aabe1075" + integrity sha512-Xsmf94D/DdeDISAECUaxXVxhh+kHdbOQE4CnP4igo3HXL3BSmmUpD5M7orH434EZZwBTFF2xe5SgsQr/wOBuNw== + +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.6.tgz" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.npmmirror.com/nopt/-/nopt-1.0.10.tgz" + integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== + dependencies: + abbrev "1" + +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz#b46b24e0616d06cadf9d5718b29b6d445a82a62c" + integrity sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg== + dependencies: + hosted-git-info "^5.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +npm-bundled@^1.1.1: + version "1.1.2" + resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-bundled@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz#94113f7eb342cd7a67de1e789f896b04d2c600f4" + integrity sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw== + dependencies: + npm-normalize-package-bin "^2.0.0" + +npm-install-checks@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234" + integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-normalize-package-bin@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz#9447a1adaaf89d8ad0abe24c6c84ad614a675fff" + integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== + +npm-package-arg@^8.1.5: + version "8.1.5" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" + integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== + dependencies: + hosted-git-info "^4.0.1" + semver "^7.3.4" + validate-npm-package-name "^3.0.0" + +npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: + version "9.1.0" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz#a60e9f1e7c03e4e3e4e994ea87fff8b90b522987" + integrity sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw== + dependencies: + hosted-git-info "^5.0.0" + proc-log "^2.0.1" + semver "^7.3.5" + validate-npm-package-name "^4.0.0" + +npm-packlist@^5.1.0: + version "5.1.3" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz#69d253e6fd664b9058b85005905012e00e69274b" + integrity sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg== + dependencies: + glob "^8.0.1" + ignore-walk "^5.0.1" + npm-bundled "^2.0.0" + npm-normalize-package-bin "^2.0.0" + +npm-pick-manifest@^7.0.0: + version "7.0.2" + resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz#1d372b4e7ea7c6712316c0e99388a73ed3496e84" + integrity sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw== + dependencies: + npm-install-checks "^5.0.0" + npm-normalize-package-bin "^2.0.0" + npm-package-arg "^9.0.0" + semver "^7.3.5" + +npm-registry-fetch@^13.0.1: + version "13.3.1" + resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz#bb078b5fa6c52774116ae501ba1af2a33166af7e" + integrity sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw== + dependencies: + make-fetch-happen "^10.0.6" + minipass "^3.1.6" + minipass-fetch "^2.0.3" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^9.0.1" + proc-log "^2.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== + dependencies: + path-key "^2.0.0" + +npminstall@^6.5.1: + version "6.5.1" + resolved "https://registry.npmjs.org/npminstall/-/npminstall-6.5.1.tgz#bf299f95e245a29395402b82da36fb4077658e99" + integrity sha512-vzSNuEcFT68zc7GUQLVqz77J2gLFNc1u3IQW8BjVk3dwud3YlUvsZM8pnn8r7yg97xmC/d0QI7RSQo/CPW0MTQ== + dependencies: + await-event "^2.1.0" + bin-links "^2.3.0" + binary-mirror-config "^1.19.0" + bytes "^3.1.0" + chalk "^2.4.2" + cmd-shim-hotfix "^3.0.3" + debug "^4.1.1" + destroy "^1.0.4" + detect-libc "^2.0.1" + fs-extra "^7.0.1" + minimatch "^3.0.4" + minimist "^1.2.0" + moment "^2.24.0" + ms "^2.1.1" + node-gyp "^9.0.0" + node-homedir "^1.1.1" + normalize-package-data "^2.5.0" + npm-normalize-package-bin "^1.0.1" + npm-package-arg "^8.1.5" + ora "^4.0.5" + p-map "^2.1.0" + pacote "^13.0.0" + runscript "^1.3.0" + semver "^6.0.0" + tar "^4.4.8" + urllib "^3.0.3" + utility "^1.16.1" + +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/object-hash/-/object-hash-3.0.0.tgz" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + +object.pick@^1.1.1, object.pick@^1.1.2: + version "1.3.0" + resolved "https://registry.npmmirror.com/object.pick/-/object.pick-1.3.0.tgz" + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== + dependencies: + isobject "^3.0.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/onetime/-/onetime-1.1.0.tgz" + integrity sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A== + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +ora@^4.0.5: + version "4.1.1" + resolved "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz#566cc0348a15c36f5f0e979612842e02ba9dddbc" + integrity sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A== + dependencies: + chalk "^3.0.0" + cli-cursor "^3.1.0" + cli-spinners "^2.2.0" + is-interactive "^1.0.0" + log-symbols "^3.0.0" + mute-stream "0.0.8" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-name@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/os-name/-/os-name-1.0.3.tgz#1b379f64835af7c5a7f498b357cb95215c159edf" + integrity sha512-f5estLO2KN8vgtTRaILIgEGBoBrMnZ3JQ7W9TMZCnOIGwHe8TRGSpcagnWDo+Dfhd/z08k9Xe75hvciJJ8Qaew== + dependencies: + osx-release "^1.0.0" + win-release "^1.0.0" + +osx-release@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/osx-release/-/osx-release-1.1.0.tgz#f217911a28136949af1bf9308b241e2737d3cd6c" + integrity sha512-ixCMMwnVxyHFQLQnINhmIpWqXIfS2YOXchwQrk+OFzmo6nDjQ0E4KXAyyUh0T0MZgV4bUhkRrAbVqlE4yLVq4A== + dependencies: + minimist "^1.1.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-map@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.npmmirror.com/package-json/-/package-json-4.0.1.tgz" + integrity sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA== + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + +pacote@^13.0.0: + version "13.6.2" + resolved "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz#0d444ba3618ab3e5cd330b451c22967bbd0ca48a" + integrity sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg== + dependencies: + "@npmcli/git" "^3.0.0" + "@npmcli/installed-package-contents" "^1.0.7" + "@npmcli/promise-spawn" "^3.0.0" + "@npmcli/run-script" "^4.1.0" + cacache "^16.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + infer-owner "^1.0.4" + minipass "^3.1.6" + mkdirp "^1.0.4" + npm-package-arg "^9.0.0" + npm-packlist "^5.1.0" + npm-pick-manifest "^7.0.0" + npm-registry-fetch "^13.0.1" + proc-log "^2.0.0" + promise-retry "^2.0.1" + read-package-json "^5.0.0" + read-package-json-fast "^2.0.3" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/parse-json/-/parse-json-2.2.0.tgz" + integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== + dependencies: + error-ex "^1.2.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/path-is-inside/-/path-is-inside-1.0.2.tgz" + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== + +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pinia@^2.0.15: + version "2.0.17" + resolved "https://registry.npmmirror.com/pinia/-/pinia-2.0.17.tgz" + integrity sha512-AtwLwEWQgIjofjgeFT+nxbnK5lT2QwQjaHNEDqpsi2AiCwf/NY78uWTeHUyEhiiJy8+sBmw0ujgQMoQbWiZDfA== + dependencies: + "@vue/devtools-api" "^6.2.1" + vue-demi "*" + +popper.js@^1.16.1: + version "1.16.1" + resolved "https://registry.npmmirror.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" + integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== + +popsicle-proxy-agent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/popsicle-proxy-agent/-/popsicle-proxy-agent-3.0.0.tgz" + integrity sha512-+0MhWUYhHbBWWIdKT4sO5cwgEMXPDskC3mGpgiCMLUdJt3mV3OuEFXubSjsiF4UDuiK6XNEst8oasZe9ZCUs8Q== + dependencies: + http-proxy-agent "^1.0.0" + https-proxy-agent "^1.0.0" + +popsicle-retry@^3.2.0: + version "3.2.1" + resolved "https://registry.npmmirror.com/popsicle-retry/-/popsicle-retry-3.2.1.tgz" + integrity sha512-AOKZJrHLXZMaMQtQcQW03tDZSgknkFOdoeAv5YuXuE1HqJH3D1oobHYmVIIjmdyBdHsqBnCX1inq2lRX1zocxQ== + dependencies: + any-promise "^1.1.0" + xtend "^4.0.1" + +popsicle-rewrite@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/popsicle-rewrite/-/popsicle-rewrite-1.0.0.tgz" + integrity sha512-ySNEf50wDXcSr89LCsAb00dYItQ/Cnisb1aGleYFnc69pmSzFDB090pDvLwptgWWaokvFDiLCAjUWRWZyZku/w== + +popsicle-status@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/popsicle-status/-/popsicle-status-2.0.1.tgz" + integrity sha512-jMzDnC9xEmyF624Fq4kfjWkFZuK4fOiCHKtr9MthCwpmQXRT+Eck1yEXbRwOEoS9qEWQGbi3THsBfC1Bzk7R/A== + +popsicle@^9.0.0: + version "9.2.0" + resolved "https://registry.npmmirror.com/popsicle/-/popsicle-9.2.0.tgz" + integrity sha512-petRj39w05GvH1WKuGFmzxR9+k+R9E7zX5XWTFee7P/qf88hMuLT7aAO/RsmldpQMtJsWQISkTQlfMRECKlxhw== + dependencies: + concat-stream "^1.4.7" + form-data "^2.0.0" + make-error-cause "^1.2.1" + tough-cookie "^2.0.0" + +postcss-import@^14.1.0: + version "14.1.0" + resolved "https://registry.npmmirror.com/postcss-import/-/postcss-import-14.1.0.tgz" + integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-js@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/postcss-js/-/postcss-js-4.0.0.tgz" + integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ== + dependencies: + camelcase-css "^2.0.1" + +postcss-load-config@^3.1.4: + version "3.1.4" + resolved "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz" + integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== + dependencies: + lilconfig "^2.0.5" + yaml "^1.10.2" + +postcss-nested@5.0.6: + version "5.0.6" + resolved "https://registry.npmmirror.com/postcss-nested/-/postcss-nested-5.0.6.tgz" + integrity sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA== + dependencies: + postcss-selector-parser "^6.0.6" + +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.6: + version "6.0.10" + resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz" + integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8.1.10, postcss@^8.4.13, postcss@^8.4.14: + version "8.4.14" + resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.14.tgz" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.npmmirror.com/prepend-http/-/prepend-http-1.0.4.tgz" + integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg== + +proc-log@^2.0.0, proc-log@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" + integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +promise-finally@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/promise-finally/-/promise-finally-3.0.1.tgz" + integrity sha512-hsF8r05ZnypT00IZTC71Ejiu9A7kyyVfHpdl3faasOHNJX62sNPfE8vDAz6P27RJ31i2O5ruhc6JV5xWR6GElQ== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz" + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== + +psl@^1.1.28: + version "1.9.0" + resolved "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.npmmirror.com/quick-lru/-/quick-lru-5.1.1.tgz" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +rc@^1.0.1, rc@^1.1.5, rc@^1.1.6: + version "1.2.8" + resolved "https://registry.npmmirror.com/rc/-/rc-1.2.8.tgz" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + +read-cmd-shim@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" + integrity sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw== + +read-package-json-fast@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" + integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== + dependencies: + json-parse-even-better-errors "^2.3.0" + npm-normalize-package-bin "^1.0.1" + +read-package-json@^5.0.0: + version "5.0.2" + resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz#b8779ccfd169f523b67208a89cc912e3f663f3fa" + integrity sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q== + dependencies: + glob "^8.0.1" + json-parse-even-better-errors "^2.3.1" + normalize-package-data "^4.0.0" + npm-normalize-package-bin "^2.0.0" + +readable-stream@^2.2.2: + version "2.3.7" + resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +registry-auth-token@^3.0.1: + version "3.4.0" + resolved "https://registry.npmmirror.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz" + integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.npmmirror.com/registry-url/-/registry-url-3.1.0.tgz" + integrity sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA== + dependencies: + rc "^1.0.1" + +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.22.0, resolve@^1.22.1: + version "1.22.1" + resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +restore-cursor@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-1.0.1.tgz" + integrity sha512-reSjH4HuiFlxlaBaFCiS6O76ZGG2ygKoSlCsipKdaZuKSPx/+bt9mULkn4l0asVzbEfQQmXRg6Wp6gv6m0wElw== + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^2.4.4: + version "2.7.1" + resolved "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup@^2.59.0: + version "2.77.2" + resolved "https://registry.npmmirror.com/rollup/-/rollup-2.77.2.tgz" + integrity sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g== + optionalDependencies: + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +runscript@^1.3.0: + version "1.5.3" + resolved "https://registry.npmjs.org/runscript/-/runscript-1.5.3.tgz#6ec1c3ef9e9c3709f46c493dcf1e17ea2f21854f" + integrity sha512-NXrp575MpkATA/mVKOI3j/f6aDItqQzjjmedXGnRN0YT9RqjKV9pGXo0cqSgh0SyvkgIHXOU+Dw3VlM/32qFng== + dependencies: + debug "^2.6.8" + is-type-of "^1.1.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/semver-diff/-/semver-diff-2.1.0.tgz" + integrity sha512-gL8F8L4ORwsS0+iQ34yCYv///jsOq0ZL7WP55d1HnJ32o7tyFYEFQZQA22mrLIacZdU6xecaBBZ+uEiffGNyXw== + dependencies: + semver "^5.0.3" + +"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0: + version "5.7.1" + resolved "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5: + version "7.3.7" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +semver@~5.0.1: + version "5.0.3" + resolved "https://registry.npmmirror.com/semver/-/semver-5.0.3.tgz" + integrity sha512-5OkOBiw69xqmxOFIXwXsiY1HlE+om8nNptg1ZIf95fzcnfgOv2fLm7pmmGbRJsjJIqPpW5Kwy4wpDBTz5wQlUw== + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + +slice-ansi@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-1.0.0.tgz" + integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== + dependencies: + is-fullwidth-code-point "^2.0.0" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.7.0" + resolved "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz#f9225acdb841e874dca25f870e9130990f3913d0" + integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.npmmirror.com/sort-keys/-/sort-keys-1.1.2.tgz" + integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== + dependencies: + is-plain-obj "^1.0.0" + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.12" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" + integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== + +ssri@^9.0.0: + version "9.0.1" + resolved "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" + +string-template@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/string-template/-/string-template-1.0.0.tgz" + integrity sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg== + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/string-width/-/string-width-2.1.1.tgz" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-2.0.0.tgz" + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tailwindcss@^3: + version "3.1.8" + resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz#4f8520550d67a835d32f2f4021580f9fddb7b741" + integrity sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g== + dependencies: + arg "^5.0.2" + chokidar "^3.5.3" + color-name "^1.1.4" + detective "^5.2.1" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.2.11" + glob-parent "^6.0.2" + is-glob "^4.0.3" + lilconfig "^2.0.6" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.0.0" + postcss "^8.4.14" + postcss-import "^14.1.0" + postcss-js "^4.0.0" + postcss-load-config "^3.1.4" + postcss-nested "5.0.6" + postcss-selector-parser "^6.0.10" + postcss-value-parser "^4.2.0" + quick-lru "^5.1.1" + resolve "^1.22.1" + +tailwindcss@^3.1.4: + version "3.1.7" + resolved "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.1.7.tgz" + integrity sha512-r7mgumZ3k0InfVPpGWcX8X/Ut4xBfv+1O/+C73ar/m01LxGVzWvPxF/w6xIUPEztrCoz7axfx0SMdh8FH8ZvRQ== + dependencies: + arg "^5.0.2" + chokidar "^3.5.3" + color-name "^1.1.4" + detective "^5.2.1" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.2.11" + glob-parent "^6.0.2" + is-glob "^4.0.3" + lilconfig "^2.0.6" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.0.0" + postcss "^8.4.14" + postcss-import "^14.1.0" + postcss-js "^4.0.0" + postcss-load-config "^3.1.4" + postcss-nested "5.0.6" + postcss-selector-parser "^6.0.10" + postcss-value-parser "^4.2.0" + quick-lru "^5.1.1" + resolve "^1.22.1" + +tar@^4.4.8: + version "4.4.19" + resolved "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" + +tar@^6.1.11, tar@^6.1.2: + version "6.1.11" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/term-size/-/term-size-1.2.0.tgz" + integrity sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ== + dependencies: + execa "^0.7.0" + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4", thenify@^3.1.0, thenify@^3.2.0: + version "3.3.1" + resolved "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +throat@^3.0.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/throat/-/throat-3.2.0.tgz" + integrity sha512-/EY8VpvlqJ+sFtLPeOgc8Pl7kQVOWv0woD87KTXVHPIAE842FGT+rokxIhe8xIUP1cfgrkt0as0vDLjDiMtr8w== + +timed-out@^4.0.0: + version "4.0.1" + resolved "https://registry.npmmirror.com/timed-out/-/timed-out-4.0.1.tgz" + integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +touch@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/touch/-/touch-1.0.0.tgz" + integrity sha512-7PLLVW4cfMVYXtMgX0ynJvyZDiupF2rzGzzf0yATTzgCgNK98DHjRSTm5zU1bFUtRjFdXNrEynn9+vhflVpC0A== + dependencies: + nopt "~1.0.10" + +tough-cookie@^2.0.0: + version "2.5.0" + resolved "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-2.5.0.tgz" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tslib@2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz" + integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== + +tslib@^2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typescript@^2.1.4: + version "2.9.2" + resolved "https://registry.npmmirror.com/typescript/-/typescript-2.9.2.tgz" + integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w== + +typescript@^4.7.4: + version "4.7.4" + resolved "https://registry.npmmirror.com/typescript/-/typescript-4.7.4.tgz" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + +typings-core@^2.3.3: + version "2.3.3" + resolved "https://registry.npmmirror.com/typings-core/-/typings-core-2.3.3.tgz" + integrity sha512-FI/cwKyu9t84BXf83aIhGYzitfhEdo02l09xZaqdwQo9Xj4RjWpS1m+m7vljz373zcx6rudgVuESuo/dY1N4cw== + dependencies: + array-uniq "^1.0.2" + configstore "^3.0.0" + debug "^2.2.0" + detect-indent "^5.0.0" + graceful-fs "^4.1.2" + has "^1.0.1" + invariant "^2.2.0" + is-absolute "^0.2.3" + jspm-config "^0.3.0" + listify "^1.0.0" + lockfile "^1.0.1" + make-error-cause "^1.2.1" + mkdirp "^0.5.1" + object.pick "^1.1.1" + parse-json "^2.2.0" + popsicle "^9.0.0" + popsicle-proxy-agent "^3.0.0" + popsicle-retry "^3.2.0" + popsicle-rewrite "^1.0.0" + popsicle-status "^2.0.0" + promise-finally "^3.0.0" + rc "^1.1.5" + rimraf "^2.4.4" + sort-keys "^1.0.0" + string-template "^1.0.0" + strip-bom "^3.0.0" + thenify "^3.1.0" + throat "^3.0.0" + touch "^1.0.0" + typescript "^2.1.4" + xtend "^4.0.0" + zip-object "^0.1.0" + +typings@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/typings/-/typings-2.1.1.tgz" + integrity sha512-ABFg64N1Vb0qHSIyks4kq1P02bWuwRmvCoD6d03Gmha1B5tl4uuz4w/bCCITW1rzC0+IYRGZ5PI0e2G7kqXGfw== + dependencies: + archy "^1.0.0" + bluebird "^3.1.1" + chalk "^1.0.0" + cli-truncate "^1.0.0" + columnify "^1.5.2" + elegant-spinner "^1.0.1" + has-unicode "^2.0.1" + listify "^1.0.0" + log-update "^1.0.2" + minimist "^1.2.0" + promise-finally "^3.0.0" + typings-core "^2.3.3" + update-notifier "^2.0.0" + wordwrap "^1.0.0" + xtend "^4.0.1" + +unc-path-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.npmmirror.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz" + integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg== + +undici@^5.6.0: + version "5.10.0" + resolved "https://registry.npmjs.org/undici/-/undici-5.10.0.tgz#dd9391087a90ccfbd007568db458674232ebf014" + integrity sha512-c8HsD3IbwmjjbLvoZuRI26TZic+TSEe8FPMLLOkN1AfYRhdjnKBU6yL+IwcSCbdZiX4e5t0lfMDLDCqj4Sq70g== + +unescape@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/unescape/-/unescape-1.0.1.tgz#956e430f61cad8a4d57d82c518f5e6cc5d0dda96" + integrity sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ== + dependencies: + extend-shallow "^2.0.1" + +unique-filename@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" + integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== + dependencies: + unique-slug "^3.0.0" + +unique-slug@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" + integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== + dependencies: + imurmurhash "^0.1.4" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/unique-string/-/unique-string-1.0.0.tgz" + integrity sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg== + dependencies: + crypto-random-string "^1.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/unzip-response/-/unzip-response-2.0.1.tgz" + integrity sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw== + +update-browserslist-db@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz" + integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +update-notifier@^2.0.0: + version "2.5.0" + resolved "https://registry.npmmirror.com/update-notifier/-/update-notifier-2.5.0.tgz" + integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz" + integrity sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA== + dependencies: + prepend-http "^1.0.1" + +urllib@^3.0.3: + version "3.1.3" + resolved "https://registry.npmjs.org/urllib/-/urllib-3.1.3.tgz#ae610e37701eed33c079f570b863449383711587" + integrity sha512-pE0ixww5vCpYpQQA6AM4wQgygit54QvbCnHFi/3AkjIXqvQcfJ3LJTDQXAI/b3yNzq6Bcu1qNn8znzbwY14a1Q== + dependencies: + default-user-agent "^1.0.0" + digest-header "^0.0.1" + form-data-encoder "^1.7.2" + formdata-node "^4.3.3" + mime-types "^2.1.35" + pump "^3.0.0" + tslib "^2.4.0" + undici "^5.6.0" + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utility@0.1.11: + version "0.1.11" + resolved "https://registry.npmjs.org/utility/-/utility-0.1.11.tgz#fde60cf9b4e4751947a0cf5d104ce29367226715" + integrity sha512-epFsJ71+/yC7MKMX7CM9azP31QBIQhywkiBUj74i/T3Y2TXtEor26QBkat7lGamrrNTr5CBI1imd/8F0Bmqw4g== + dependencies: + address ">=0.0.1" + +utility@^1.16.1: + version "1.17.0" + resolved "https://registry.npmjs.org/utility/-/utility-1.17.0.tgz#60819f712a6e0ce774f52fb1d691992a5f59d362" + integrity sha512-KdVkF9An/0239BJ4+dqOa7NPrPIOeQE9AGfx0XS16O9DBiHNHRJMoeU5nL6pRGAkgJOqdOu8R4gBRcXnAocJKw== + dependencies: + copy-to "^2.0.1" + escape-html "^1.0.3" + mkdirp "^0.5.1" + mz "^2.7.0" + unescape "^1.0.1" + +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== + dependencies: + builtins "^1.0.3" + +validate-npm-package-name@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" + integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== + dependencies: + builtins "^5.0.0" + +vite@^2.9.9: + version "2.9.14" + resolved "https://registry.npmmirror.com/vite/-/vite-2.9.14.tgz" + integrity sha512-P/UCjSpSMcE54r4mPak55hWAZPlyfS369svib/gpmz8/01L822lMPOJ/RYW6tLCe1RPvMvOsJ17erf55bKp4Hw== + dependencies: + esbuild "^0.14.27" + postcss "^8.4.13" + resolve "^1.22.0" + rollup "^2.59.0" + optionalDependencies: + fsevents "~2.3.2" + +vue-demi@*: + version "0.13.6" + resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.6.tgz" + integrity sha512-02NYpxgyGE2kKGegRPYlNQSL1UWfA/+JqvzhGCOYjhfbLWXU5QQX0+9pAm/R2sCOPKr5NBxVIab7fvFU0B1RxQ== + +vue-router@4: + version "4.1.3" + resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.1.3.tgz" + integrity sha512-XvK81bcYglKiayT7/vYAg/f36ExPC4t90R/HIpzrZ5x+17BOWptXLCrEPufGgZeuq68ww4ekSIMBZY1qdUdfjA== + dependencies: + "@vue/devtools-api" "^6.1.4" + +vue-tsc@^0.34.7: + version "0.34.17" + resolved "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-0.34.17.tgz" + integrity sha512-jzUXky44ZLHC4daaJag7FQr3idlPYN719/K1eObGljz5KaS2UnVGTU/XSYCd7d6ampYYg4OsyalbHyJIxV0aEQ== + dependencies: + "@volar/vue-typescript" "0.34.17" + +vue@^3.2.25: + version "3.2.37" + resolved "https://registry.npmmirror.com/vue/-/vue-3.2.37.tgz" + integrity sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ== + dependencies: + "@vue/compiler-dom" "3.2.37" + "@vue/compiler-sfc" "3.2.37" + "@vue/runtime-dom" "3.2.37" + "@vue/server-renderer" "3.2.37" + "@vue/shared" "3.2.37" + +wcwidth@^1.0.0, wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +web-streams-polyfill@4.0.0-beta.3: + version "4.0.0-beta.3" + resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38" + integrity sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug== + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.npmmirror.com/which/-/which-1.3.1.tgz" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +widest-line@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/widest-line/-/widest-line-2.0.1.tgz" + integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== + dependencies: + string-width "^2.1.1" + +win-release@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz#5fa55e02be7ca934edfc12665632e849b72e5209" + integrity sha512-iCRnKVvGxOQdsKhcQId2PXV1vV3J/sDPXKA4Oe9+Eti2nb2ESEsYHRYls/UjoUW3bIc5ZDO8dTH50A/5iVN+bw== + dependencies: + semver "^5.0.1" + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/wordwrap/-/wordwrap-1.0.0.tgz" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^2.0.0: + version "2.4.3" + resolved "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-file-atomic@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz" + integrity sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ== + +xstate@^4.32.1: + version "4.32.1" + resolved "https://registry.npmmirror.com/xstate/-/xstate-4.32.1.tgz" + integrity sha512-QYUd+3GkXZ8i6qdixnOn28bL3EvA++LONYL/EMWwKlFSh/hiLndJ8YTnz77FDs+JUXcwU7NZJg7qoezoRHc4GQ== + +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +xterm@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/xterm/-/xterm-5.0.0.tgz#0af50509b33d0dc62fde7a4ec17750b8e453cc5c" + integrity sha512-tmVsKzZovAYNDIaUinfz+VDclraQpPUnAME+JawosgWRMphInDded/PuY0xmU5dOhyeYZsI0nz5yd8dPYsdLTA== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz" + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== + +yallist@^3.0.0, yallist@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +zip-object@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/zip-object/-/zip-object-0.1.0.tgz" + integrity sha512-eujiZK9Z3F/WuswEIWqlaNUwUj67oRw4Op5a1VeKw4n9XBkV7EdxtgblroWBYvLmD7XqZ1cjqsbmE3jU43prTA== + +zrender@5.3.2: + version "5.3.2" + resolved "https://registry.npmmirror.com/zrender/-/zrender-5.3.2.tgz" + integrity sha512-8IiYdfwHj2rx0UeIGZGGU4WEVSDEdeVCaIg/fomejg1Xu6OifAL1GVzIPHg2D+MyUkbNgPWji90t0a8IDk+39w== + dependencies: + tslib "2.3.0" diff --git a/web-ui/pom.xml b/web-ui/pom.xml new file mode 100644 index 000000000..63accfb45 --- /dev/null +++ b/web-ui/pom.xml @@ -0,0 +1,131 @@ + + + + + arthas-all + com.taobao.arthas + ${revision} + + 4.0.0 + + web-ui + pom + + web-ui + + + + + UTF-8 + 1.7 + 1.7 + https://registry.npmmirror.com/ + http://npmmirror.com + https://npmmirror.com/mirrors/node/ + v16.16.0 + v1.22.19 + + + + web-ui + + + + + com.github.eirslett + frontend-maven-plugin + + 1.12.1 + + + + install node and yarn + + install-node-and-yarn + + + generate-resources + + + set registry + + yarn + + generate-resources + + config set registry ${yarn.registry.url} + + + + yarn install + + yarn + + + + install + + + + vite build + + yarn + + + vite build + + + + + ${node.version} + ${yarn.version} + + + ${node.download.url} + + + arthasWebConsole + + target + + + + org.apache.maven.plugins + maven-resources-plugin + 3.1.0 + + + copy dist + process-resources + + copy-resources + + + + + arthasWebConsole/dist + + + ${project.build.directory}/static + + + + + + + + \ No newline at end of file