├── env.d.ts ├── public └── favicon.png ├── .vscode └── extensions.json ├── src ├── styles │ ├── globals.scss │ ├── variables.scss │ ├── typography.scss │ ├── markdown.scss │ └── normalize.scss ├── commands │ ├── clear.ts │ ├── pwd.ts │ ├── help.ts │ ├── exec.ts │ ├── open.ts │ ├── cd.ts │ ├── cat.ts │ ├── runCommand.ts │ ├── ls.ts │ └── common.ts ├── config │ ├── index.ts │ ├── projects │ │ ├── vueterm.md │ │ ├── go-blog.md │ │ ├── vueblogger.md │ │ ├── baiduspider.md │ │ └── logture.md │ ├── heading.md │ ├── commands.ts │ ├── filesystem.ts │ └── about.md ├── main.ts ├── components │ ├── MarkdownRenderer.vue │ ├── TerminalHeader.vue │ ├── MainTerminal.vue │ ├── TerminalCommand.vue │ ├── TerminalInput.vue │ └── TerminalHistory.vue ├── views │ └── IndexView.vue ├── router │ └── index.ts ├── typings │ └── md-shim.d.ts ├── App.vue └── stores │ └── terminal.ts ├── tsconfig.vite-config.json ├── README.md ├── .editorconfig ├── tsconfig.json ├── .eslintrc.js ├── .gitignore ├── index.html ├── vite.config.ts ├── package.json └── pnpm-lock.yaml /env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/samzhangjy/VueTerm/HEAD/public/favicon.png -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["johnsoncodehk.volar", "johnsoncodehk.vscode-typescript-vue-plugin"] 3 | } 4 | -------------------------------------------------------------------------------- /src/styles/globals.scss: -------------------------------------------------------------------------------- 1 | @import url('./normalize.scss'); 2 | @import url('./typography.scss'); 3 | 4 | html, body { 5 | width: 100%; 6 | height: 100%; 7 | } 8 | -------------------------------------------------------------------------------- /tsconfig.vite-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@vue/tsconfig/tsconfig.node.json", 3 | "include": ["vite.config.*"], 4 | "compilerOptions": { 5 | "composite": true, 6 | "types": ["node"] 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/commands/clear.ts: -------------------------------------------------------------------------------- 1 | import { useTerminalStore } from "@/stores/terminal"; 2 | 3 | const clear = () => { 4 | const store = useTerminalStore(); 5 | store.clearHistory(); 6 | store.currentCommand = ""; 7 | }; 8 | 9 | export default clear; 10 | -------------------------------------------------------------------------------- /src/config/index.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | info: { 3 | name: "Sam Zhang", 4 | username: "samzhangjy", 5 | domain: "samzhangjy.com", 6 | version: "v0.0.1", 7 | }, 8 | terminal: { 9 | visitorUsername: "guest", 10 | }, 11 | }; 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # VueTerm 2 | 3 | An Ubuntu like terminal portfolio site, built with Vue 3 and TypeScript. 4 | 5 | Documentation in progress. 6 | 7 | ## TODO 8 | 9 | - [ ] Add more commands 10 | - [ ] Add auto completion 11 | - [ ] Finish documentation 12 | -------------------------------------------------------------------------------- /src/config/projects/vueterm.md: -------------------------------------------------------------------------------- 1 | # VueTerm 2 | 3 | Demo: 4 | GitHub: 5 | 6 | 7 | 8 | An Ubuntu like terminal portfolio site, built with Vue 3 and TypeScript. 9 | 10 | Documentation in progress. 11 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from "vue"; 2 | import { createPinia } from "pinia"; 3 | 4 | import App from "./App.vue"; 5 | import router from "./router"; 6 | 7 | const app = createApp(App); 8 | 9 | app.use(createPinia()); 10 | app.use(router); 11 | 12 | app.mount("#app"); 13 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | [*] 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | charset = utf-8 11 | trim_trailing_whitespace = false 12 | insert_final_newline = false -------------------------------------------------------------------------------- /src/config/projects/go-blog.md: -------------------------------------------------------------------------------- 1 | # Go Blog 2 | 3 | GitHub: 4 | Tutorial series: 5 | 6 | 7 | 8 | This is the source code for my series at [HashNode](https://samzhangjy.hashnode.dev/learning-go-web-development-from-zero). 9 | -------------------------------------------------------------------------------- /src/components/MarkdownRenderer.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 15 | -------------------------------------------------------------------------------- /src/commands/pwd.ts: -------------------------------------------------------------------------------- 1 | import { useTerminalStore } from "@/stores/terminal"; 2 | import config from "@/config"; 3 | 4 | const pwd = () => { 5 | const store = useTerminalStore(); 6 | store.endCurrentCommand( 7 | `/home/${config.terminal.visitorUsername}${store.pwd.slice(1)}` 8 | ); 9 | }; 10 | 11 | export default pwd; 12 | -------------------------------------------------------------------------------- /src/views/IndexView.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 18 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@vue/tsconfig/tsconfig.web.json", 3 | "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], 4 | "compilerOptions": { 5 | "baseUrl": ".", 6 | "paths": { 7 | "@/*": ["./src/*"] 8 | } 9 | }, 10 | 11 | "references": [ 12 | { 13 | "path": "./tsconfig.vite-config.json" 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /src/config/heading.md: -------------------------------------------------------------------------------- 1 | Welcome to Ubuntu 20.04 Web Edition (TS/Vue 3.2.33 Build 114514) 2 | 3 | * Documentation: https://github.com/samzhangjy/VueTerm#readme 4 | * GitHub: https://github.com/samzhangjy/VueTerm 5 | * Support: https://github.com/samzhangjy/VueTerm/issues 6 | 7 | Last login: Sun Apr 3 11:45:40 2022 from 127.0.0.1 8 | 9 | Type `help` to see all available commands. 10 | -------------------------------------------------------------------------------- /src/router/index.ts: -------------------------------------------------------------------------------- 1 | import { createRouter, createWebHistory } from "vue-router"; 2 | import IndexView from "../views/IndexView.vue"; 3 | 4 | const router = createRouter({ 5 | history: createWebHistory(import.meta.env.BASE_URL), 6 | routes: [ 7 | { 8 | path: "/", 9 | name: "index", 10 | component: IndexView, 11 | }, 12 | ], 13 | }); 14 | 15 | export default router; 16 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | require("@rushstack/eslint-patch/modern-module-resolution"); 3 | 4 | module.exports = { 5 | root: true, 6 | extends: [ 7 | "plugin:vue/vue3-essential", 8 | "eslint:recommended", 9 | "@vue/eslint-config-typescript/recommended", 10 | "@vue/eslint-config-prettier", 11 | ], 12 | env: { 13 | "vue/setup-compiler-macros": true, 14 | }, 15 | }; 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | .DS_Store 12 | dist 13 | dist-ssr 14 | coverage 15 | *.local 16 | 17 | /cypress/videos/ 18 | /cypress/screenshots/ 19 | 20 | # Editor directories and files 21 | .vscode/* 22 | !.vscode/extensions.json 23 | .idea 24 | *.suo 25 | *.ntvs* 26 | *.njsproj 27 | *.sln 28 | *.sw? 29 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Sam Zhang. 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/commands/help.ts: -------------------------------------------------------------------------------- 1 | import commands from "@/config/commands"; 2 | import { useTerminalStore } from "@/stores/terminal"; 3 | 4 | const help = () => { 5 | const store = useTerminalStore(); 6 | let helpString = ""; 7 | commands.commands.forEach((command) => { 8 | helpString += `${command.name}: ${command.description}`; 9 | }); 10 | helpString += ""; 11 | store.endCurrentCommand(helpString); 12 | }; 13 | 14 | export default help; 15 | -------------------------------------------------------------------------------- /src/components/TerminalHeader.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 13 | 14 | 17 | -------------------------------------------------------------------------------- /src/styles/variables.scss: -------------------------------------------------------------------------------- 1 | $black: #000000; 2 | $white: #e5e7eb; 3 | $green: #22c55e; 4 | $blue: #60a5fa; 5 | $purple: #a78bfa; 6 | $gray: #52525b; 7 | $red: #f87171; 8 | 9 | $background: $black; 10 | $foreground: $white; 11 | $heading-before: $blue; 12 | $link: $white; 13 | $selection: $gray; 14 | 15 | $font-regular: 16px; 16 | 17 | $break-xs: 576px; 18 | $break-sm: 768px; 19 | $break-md: 1024px; 20 | $break-lg: 1280px; 21 | 22 | $link-decoration: underline; 23 | $link-decoration-hover: underline; 24 | -------------------------------------------------------------------------------- /src/components/MainTerminal.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 14 | 15 | 25 | -------------------------------------------------------------------------------- /src/commands/exec.ts: -------------------------------------------------------------------------------- 1 | import { useTerminalStore } from "@/stores/terminal"; 2 | import { checkFileStatus, FileStatus } from "./common"; 3 | 4 | const exec = (path: string) => { 5 | const store = useTerminalStore(); 6 | const result = checkFileStatus(path); 7 | 8 | if (result.status !== FileStatus.EXIST) { 9 | store.endCurrentCommand(`exec: no such file or directory: ${path}`); 10 | return; 11 | } 12 | if (result.type !== "link") { 13 | store.endCurrentCommand(`exec: not executable: ${path}`); 14 | return; 15 | } 16 | 17 | store.endCurrentCommand(""); 18 | window.open(result.content); 19 | }; 20 | 21 | export default exec; 22 | -------------------------------------------------------------------------------- /src/styles/typography.scss: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;700&display=swap'); 2 | @import "./variables.scss"; 3 | 4 | html, body { 5 | font-family: 'Fira Code', monospace; 6 | background-color: $background; 7 | } 8 | 9 | * { 10 | font-size: $font-regular; 11 | font-family: 'Fira Code', monospace; 12 | line-height: 1.5; 13 | 14 | &::selection { 15 | background: $selection; 16 | } 17 | } 18 | 19 | ::-webkit-scrollbar { 20 | width: 2px; 21 | } 22 | 23 | ::-webkit-scrollbar-track { 24 | background: $background; 25 | } 26 | 27 | ::-webkit-scrollbar-thumb { 28 | background: $gray; 29 | } 30 | -------------------------------------------------------------------------------- /src/commands/open.ts: -------------------------------------------------------------------------------- 1 | import { useTerminalStore } from "@/stores/terminal"; 2 | import cat from "./cat"; 3 | import cd from "./cd"; 4 | import exec from "./exec"; 5 | import { checkFileStatus, FileStatus } from "./common"; 6 | 7 | const open = (path: string) => { 8 | const store = useTerminalStore(); 9 | const result = checkFileStatus(path); 10 | 11 | if (result.status !== FileStatus.EXIST) { 12 | store.endCurrentCommand(`open: no such file or directory: ${path}`); 13 | return; 14 | } 15 | 16 | if (result.type === "folder") { 17 | cd(path); 18 | } else if (result.type === "file") { 19 | cat(path); 20 | } else if (result.type === "link") { 21 | exec(path); 22 | } 23 | }; 24 | 25 | export default open; 26 | -------------------------------------------------------------------------------- /src/config/commands.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | commands: [ 3 | { 4 | name: "help", 5 | description: "Show this help message and exit", 6 | }, 7 | { 8 | name: "ls", 9 | description: "List files in current directory", 10 | }, 11 | { 12 | name: "cat", 13 | description: "Show file content", 14 | }, 15 | { 16 | name: "cd", 17 | description: "Change current directory", 18 | }, 19 | { 20 | name: "clear", 21 | description: "Clear terminal history", 22 | }, 23 | { 24 | name: "pwd", 25 | description: "Show current working directory", 26 | }, 27 | { 28 | name: "open", 29 | description: "Open a file or a folder", 30 | }, 31 | ], 32 | }; 33 | -------------------------------------------------------------------------------- /src/config/projects/vueblogger.md: -------------------------------------------------------------------------------- 1 | # VueBlogger 2 | 3 | Demo: 4 | GitHub: 5 | 6 | 7 | 8 | VueBlogger is a light-weight blogging site generator for Vue.js, built for geeks who wanted to write their blog site in Vue and write posts in Markdown. 9 | 10 | I developed it for a reason: there isn't really a simple blogging tool for Vue. VuePress works, but it's to complicated. So for that purpose, I developed this light-weight blogging site for Vue: VueBlogger. 11 | 12 | You can host it on any server that has Nodejs and Vue installed. Actually, you even don't need them if you already built your blog on your own laptop: just host the HTML and JavaScript files directly! 13 | 14 | ## Usage 15 | 16 | Please refer to the [documentation](https://samzhangjy.github.io/#/posts/vue-blogger). 17 | -------------------------------------------------------------------------------- /src/commands/cd.ts: -------------------------------------------------------------------------------- 1 | import { useTerminalStore } from "@/stores/terminal"; 2 | import { checkFileStatus, FileStatus } from "@/commands/common"; 3 | 4 | const cd = (path: string) => { 5 | const store = useTerminalStore(); 6 | const result = checkFileStatus(path); 7 | if (result.status === FileStatus.EXIST && result.type === "folder") { 8 | store.endCurrentCommand(""); 9 | store.pwd = result.path; 10 | } else if (result.status === FileStatus.EXIST) { 11 | store.endCurrentCommand(`cd: not a directory: ${path}`); 12 | } else if (result.status === FileStatus.NOT_EXIST) { 13 | store.endCurrentCommand(`cd: no such file or directory: ${path}`); 14 | } else if (result.status === FileStatus.TOO_COMPLEX) { 15 | store.endCurrentCommand(`cd: path too complicated: ${path}`); 16 | } else { 17 | store.endCurrentCommand(`cd: unknown error`); 18 | } 19 | }; 20 | 21 | export default cd; 22 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { fileURLToPath, URL } from "url"; 2 | 3 | import { defineConfig } from "vite"; 4 | import vue from "@vitejs/plugin-vue"; 5 | import markdown, { Mode } from "vite-plugin-markdown"; 6 | import MarkdownIt from "markdown-it"; 7 | import mila from "markdown-it-link-attributes"; 8 | import highlightjs from "markdown-it-highlightjs"; 9 | 10 | // https://vitejs.dev/config/ 11 | export default defineConfig({ 12 | plugins: [ 13 | vue(), 14 | markdown({ 15 | mode: [Mode.VUE, Mode.HTML], 16 | markdownIt: MarkdownIt({ 17 | linkify: true, 18 | html: true, 19 | typographer: true, 20 | breaks: true, 21 | }) 22 | .use(mila, { attrs: { target: "_blank", rel: "noopener" } }) 23 | .use(highlightjs), 24 | }), 25 | ], 26 | resolve: { 27 | alias: { 28 | "@": fileURLToPath(new URL("./src", import.meta.url)), 29 | }, 30 | }, 31 | }); 32 | -------------------------------------------------------------------------------- /src/typings/md-shim.d.ts: -------------------------------------------------------------------------------- 1 | declare module "*.md" { 2 | // "unknown" would be more detailed depends on how you structure frontmatter 3 | const attributes: Record; 4 | 5 | // When "Mode.TOC" is requested 6 | const toc: { level: string; content: string }[]; 7 | 8 | // When "Mode.HTML" is requested 9 | const html: string; 10 | 11 | // When "Mode.React" is requested. VFC could take a generic like React.VFC<{ MyComponent: TypeOfMyComponent }> 12 | import React from "react"; 13 | const ReactComponent: React.VFC; 14 | 15 | // When "Mode.Vue" is requested 16 | import { ComponentOptions, Component } from "vue"; 17 | const VueComponent: ComponentOptions; 18 | const VueComponentWith: ( 19 | components: Record 20 | ) => ComponentOptions; 21 | 22 | // Modify below per your usage 23 | export { 24 | attributes, 25 | toc, 26 | html, 27 | ReactComponent, 28 | VueComponent, 29 | VueComponentWith, 30 | }; 31 | } 32 | -------------------------------------------------------------------------------- /src/commands/cat.ts: -------------------------------------------------------------------------------- 1 | import { useTerminalStore } from "@/stores/terminal"; 2 | import { checkFileStatus, FileStatus } from "@/commands/common"; 3 | 4 | const cat = (path: string) => { 5 | const store = useTerminalStore(); 6 | const result = checkFileStatus(path); 7 | 8 | if (path.trim() === "") { 9 | store.endCurrentCommand("cat: missing operand"); 10 | return; 11 | } 12 | 13 | if (result.status === FileStatus.EXIST && result.type === "file") { 14 | store.endCurrentCommand(result.content); 15 | } else if (result.status === FileStatus.EXIST && result.type === "folder") { 16 | store.endCurrentCommand(`cat: is a directory: ${path}`); 17 | } else if (result.status === FileStatus.NOT_EXIST) { 18 | store.endCurrentCommand(`cat: no such file or directory: ${path}`); 19 | } else if (result.status === FileStatus.TOO_COMPLEX) { 20 | store.endCurrentCommand(`cat: path too complicated: ${path}`); 21 | } else { 22 | store.endCurrentCommand(`cat: unknown error`); 23 | } 24 | }; 25 | 26 | export default cat; 27 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 35 | -------------------------------------------------------------------------------- /src/config/projects/baiduspider.md: -------------------------------------------------------------------------------- 1 | # BaiduSpider 2 | 3 | GitHub: 4 | 5 | 6 | 7 | **Note: this project is not maintained by myself anymore - I transferred this job to [FHU-yezi](https://github.com/FHU-yezi).** 8 | 9 | BaiduSpider is looking for a new maintainer too! 10 | 11 | 12 | 13 | Search engine is a very powerful tool. However, if other tools could implant the most features of the search engine, then it will be even more powerful. But, I have not found any web spider to extract the search results accurately. So, with that goal in mind, I developed this project to crawl Baidu: BaiduSpider. 14 | 15 | 16 | 17 | Here’s why: 18 | 19 | - Makes things easier for data extraction, which speeds up the development of projects like deep-learning. 20 | - Extract data accurately, without Ads. 21 | - Provides in-detailed search results, supports multiple search types and typing annotation. 22 | 23 | ## Built with 24 | 25 | Some open-source packages used in BaiduSpider. 26 | 27 | - BeautifulSoup 4 28 | - requests 29 | -------------------------------------------------------------------------------- /src/config/projects/logture.md: -------------------------------------------------------------------------------- 1 | # LogTure 2 | 3 | A minimal designed, fully customizable, and extensible modern personal blogging framework, built with Nextjs. 4 | 5 | Demo: 6 | 7 | GitHub: 8 | 9 | **Note: this is a work in progress.** 10 | 11 | Features: 12 | 13 | - Fully customizable 14 | - Easy to use 15 | - SEO optimized 16 | - SSG (Static Site Generation) supported 17 | - Deploy anywhere 18 | 19 | ## Setup 20 | 21 | Clone this repository to your local machine and run the following commands: 22 | 23 | ```bash 24 | $ cd /path/to/logture_source_code 25 | $ npm install # or `yarn` 26 | $ npm run dev # or `yarn dev` to start the development server 27 | ``` 28 | 29 | To build your static blog, run the following commands: 30 | 31 | ```bash 32 | $ npm run build # or `yarn build` 33 | $ # To start the local production server, run: 34 | $ npm run start # or `yarn start` 35 | ``` 36 | 37 | ## Customizing 38 | 39 | Edit `/config/index.js` to get started. 40 | 41 | To customize blog theme, edit `/styles/variables.scss`. 42 | 43 | Enjoy! 44 | 45 | ## TODO 46 | 47 | - [x] Support PWA 48 | - [x] Optimize SEO 49 | - [x] Transform to TypeScript 50 | - [ ] Finish documentation -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "terminal-portfolio", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "dev": "vite", 6 | "build": "vue-tsc --noEmit && vite build", 7 | "preview": "vite preview --port 5050", 8 | "typecheck": "vue-tsc --noEmit", 9 | "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore" 10 | }, 11 | "dependencies": { 12 | "highlight.js": "^11.5.1", 13 | "markdown-it": "^13.0.1", 14 | "markdown-it-highlightjs": "^4.0.1", 15 | "markdown-it-link-attributes": "^4.0.0", 16 | "pinia": "^2.0.13", 17 | "vue": "^3.2.33", 18 | "vue-router": "^4.0.14" 19 | }, 20 | "devDependencies": { 21 | "@rushstack/eslint-patch": "^1.1.0", 22 | "@types/markdown-it": "^12.2.3", 23 | "@types/markdown-it-link-attributes": "^3.0.1", 24 | "@types/node": "^16.11.27", 25 | "@vitejs/plugin-vue": "^2.3.1", 26 | "@vue/eslint-config-prettier": "^7.0.0", 27 | "@vue/eslint-config-typescript": "^10.0.0", 28 | "@vue/tsconfig": "^0.1.3", 29 | "eslint": "^8.16.0", 30 | "eslint-plugin-vue": "^8.7.1", 31 | "prettier": "^2.5.1", 32 | "sass": "^1.52.1", 33 | "typescript": "~4.6.3", 34 | "vite": "^2.9.5", 35 | "vite-plugin-dynamic-import": "^0.9.6", 36 | "vite-plugin-markdown": "^2.0.2", 37 | "vue-tsc": "^0.34.7" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/components/TerminalCommand.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{ config.terminal.visitorUsername }}@{{ config.info.domain }} 6 | 7 | {{ ":" }} 8 | 9 | {{ $props.pwd }} 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 25 | 26 | 68 | -------------------------------------------------------------------------------- /src/config/filesystem.ts: -------------------------------------------------------------------------------- 1 | import { html as about } from "@/config/about.md"; 2 | import { html as logture } from "@/config/projects/logture.md"; 3 | import { html as vueterm } from "@/config/projects/vueterm.md"; 4 | import { html as vueblogger } from "@/config/projects/vueblogger.md"; 5 | import { html as go_blog } from "@/config/projects/go-blog.md"; 6 | import { html as baiduspider } from "@/config/projects/baiduspider.md"; 7 | 8 | export interface FileType { 9 | type: "folder" | "file" | "link"; 10 | path: string; 11 | name: string; 12 | content?: string; 13 | } 14 | 15 | const files: FileType[] = [ 16 | { 17 | type: "folder", 18 | path: "~/projects/", 19 | name: "projects", 20 | }, 21 | { 22 | type: "link", 23 | path: "~/", 24 | name: "blog", 25 | content: "https://blog.samzhangjy.com", 26 | }, 27 | { 28 | type: "file", 29 | content: about, 30 | path: "~/", 31 | name: "welcome.md", 32 | }, 33 | { 34 | type: "file", 35 | content: logture, 36 | path: "~/projects", 37 | name: "logture.md", 38 | }, 39 | { 40 | type: "file", 41 | content: vueterm, 42 | path: "~/projects", 43 | name: "vueterm.md", 44 | }, 45 | { 46 | type: "file", 47 | content: vueblogger, 48 | path: "~/projects", 49 | name: "vueblogger.md", 50 | }, 51 | { 52 | type: "file", 53 | content: go_blog, 54 | path: "~/projects", 55 | name: "go-blog.md", 56 | }, 57 | { 58 | type: "file", 59 | content: baiduspider, 60 | path: "~/projects", 61 | name: "baiduspider.md", 62 | }, 63 | ]; 64 | 65 | export default files; 66 | -------------------------------------------------------------------------------- /src/commands/runCommand.ts: -------------------------------------------------------------------------------- 1 | import ls from "./ls"; 2 | import cd from "./cd"; 3 | import cat from "./cat"; 4 | import pwd from "./pwd"; 5 | import help from "./help"; 6 | import open from "./open"; 7 | import { checkFileStatus, FileStatus } from "./common"; 8 | import { useTerminalStore } from "@/stores/terminal"; 9 | import clear from "./clear"; 10 | import exec from "./exec"; 11 | 12 | export enum CommandMap { 13 | ls = "ls", 14 | l = "l", 15 | cd = "cd", 16 | clear = "clear", 17 | cat = "cat", 18 | help = "help", 19 | pwd = "pwd", 20 | open = "open", 21 | } 22 | 23 | const runCommand = () => { 24 | const store = useTerminalStore(); 25 | if (store.currentCommand.trim() === "") { 26 | store.endCurrentCommand(""); 27 | return; 28 | } 29 | const commandCalled = /^(\w+)\s?(.*)$/.exec(store.currentCommand) || []; 30 | commandCalled.map((value) => { 31 | return value.trim(); 32 | }); 33 | 34 | if (store.currentCommand.startsWith("#")) { 35 | store.endCurrentCommand(""); 36 | return; 37 | } 38 | 39 | if (checkFileStatus(store.currentCommand).status === FileStatus.EXIST) { 40 | exec(store.currentCommand); 41 | return; 42 | } 43 | 44 | const command = commandCalled[1]; 45 | const arg = commandCalled[2]; 46 | 47 | const map: Record void> = { 48 | l: ls, 49 | ls: ls, 50 | cd: cd, 51 | clear: clear, 52 | cat: cat, 53 | help: help, 54 | pwd: pwd, 55 | open: open, 56 | }; 57 | 58 | Reflect.has(map, command) 59 | ? map[command as CommandMap](arg) 60 | : store.endCurrentCommand(`bash: command not found: ${commandCalled[1]}`); 61 | }; 62 | 63 | export default runCommand; 64 | -------------------------------------------------------------------------------- /src/stores/terminal.ts: -------------------------------------------------------------------------------- 1 | import { defineStore } from "pinia"; 2 | 3 | export interface File { 4 | text: string; 5 | color: string; 6 | weight: string; 7 | } 8 | 9 | export interface History { 10 | command: string; 11 | output: string | File[]; 12 | pwd: string; 13 | show?: boolean; 14 | isEmpty?: boolean; 15 | } 16 | 17 | export const useTerminalStore = defineStore({ 18 | id: "terminal", 19 | state: () => ({ 20 | currentCommand: "" as string, 21 | history: [] as History[], 22 | pwd: "~" as string, 23 | showHeader: true, 24 | }), 25 | actions: { 26 | endCurrentCommand(output?: string | File[]) { 27 | if (output === undefined) { 28 | this.currentCommand = ""; 29 | return; 30 | } 31 | let isEmpty = false; 32 | if (typeof output === "string" && output.trim() === "") isEmpty = true; 33 | this.history.push({ 34 | command: this.currentCommand, 35 | output: output, 36 | pwd: this.pwd, 37 | show: true, 38 | isEmpty, 39 | }); 40 | this.currentCommand = ""; 41 | }, 42 | clearHistory() { 43 | this.history.map((history) => (history.show = false)); 44 | this.history.push({ 45 | command: this.currentCommand, 46 | output: "", 47 | pwd: this.pwd, 48 | show: false, 49 | isEmpty: false, 50 | }); 51 | this.showHeader = false; 52 | }, 53 | }, 54 | getters: { 55 | historyShown(): History[] { 56 | return this.history.filter((history) => history.show); 57 | }, 58 | validHistory(): History[] { 59 | return this.history.filter((history) => !history.isEmpty); 60 | }, 61 | }, 62 | }); 63 | -------------------------------------------------------------------------------- /src/config/about.md: -------------------------------------------------------------------------------- 1 | # About me 2 | 3 | Hey there! I'm Sam Zhang, a 13-year-old developer from China who loves open source. 4 | 5 | And the terminal you're looking at is a demo of my project [VueTerm](https://github.com/samzhangjy/VueTerm) too! 6 | 7 | 8 | 9 | ## Tech Stack 10 | 11 | Well, I'm not sure if I'm a big fan of the word "tech" but I'm pretty sure I'm a big fan of the word "open source". 12 | 13 | - Node.js 14 | - React 15 | - Vue 16 | - Golang (Gin) 17 | - Python 18 | - Java 19 | 20 | 21 | 22 | ## Projects 23 | 24 | Below are some of my side projects! 25 | 26 | - [LogTure](https://github.com/samzhangjy/logture), a SEO optimized static blogging framework, fully customizable. My own [blog](https://blog.samzhangjy.com) was built using it too. 27 | - [VueTerm](https://github.com/samzhangjy/VueTerm), a terminal-like personal portfolio site built with Vue.js 3. This site is a demo of it. 28 | - [VueBlogger](https://github.com/samzhangjy/VueBlogger), a blog site built with Vue.js 2 and Vuesax. 29 | - [Go Blog](https://github.com/samzhangjy/go-blog), a simple blogging site backend built with Golang and Gin. It is also a part of my [tutorial on DEV.to](https://dev.to/samzhangjy/series/18273). 30 | - [BaiduSpider](https://github.com/BaiduSpider/BaiduSpider), a web spider to crawl Baidu search results, built with Python and requests. Currently not maintained by myself though. 31 | 32 | More information about my projects please refer to `~/projects` directory. 33 | 34 | 35 | 36 | ## Contact me 37 | 38 | You can find me online via: 39 | 40 | - [GitHub](https://github.com/samzhangjy) 41 | - [DEV Community](https://dev.to/samzhangjy) 42 | - [YouTube](https://www.youtube.com/channel/UC0YuenTLTizankjwjxXfeQg) 43 | - [Bilibili](https://space.bilibili.com/522408191) 44 | - [Zhihu](https://zhihu.com/people/samzhangjy) 45 | - [Email](mailto:samzhangjy@outlook.com) 46 | 47 | Feel free to discuss open source stuff with me! 48 | -------------------------------------------------------------------------------- /src/commands/ls.ts: -------------------------------------------------------------------------------- 1 | import filesystem from "@/config/filesystem"; 2 | import { useTerminalStore, type File } from "@/stores/terminal"; 3 | 4 | const getFileColor = (fileType: string) => { 5 | if (fileType === "folder") return "purple"; 6 | if (fileType === "file") return "white"; 7 | if (fileType === "link") return "green"; 8 | return "red"; 9 | }; 10 | 11 | const getFileWeight = (fileType: string) => { 12 | if (fileType === "folder") return "700"; 13 | if (fileType === "file") return "400"; 14 | if (fileType === "link") return "700"; 15 | return "700"; 16 | }; 17 | 18 | const ls = (flags: string) => { 19 | const store = useTerminalStore(); 20 | const currentFiles: File[] = []; 21 | if (flags && flags.includes("-a")) { 22 | currentFiles.push({ 23 | text: ".", 24 | color: getFileColor("folder"), 25 | weight: getFileWeight("folder"), 26 | }); 27 | currentFiles.push({ 28 | text: "..", 29 | color: getFileColor("folder"), 30 | weight: getFileWeight("folder"), 31 | }); 32 | } 33 | const pwd = store.pwd + "/"; 34 | 35 | for (let i = 0; i < filesystem.length; i++) { 36 | const file = filesystem[i]; 37 | const normalPath = file.path.slice( 38 | 0, 39 | file.path[file.path.length - 1] === "/" ? -1 : undefined 40 | ); 41 | const normalPathSlashes = normalPath.match(/\//g)?.length || 0, 42 | pwdPathSlashes = pwd.match(/\//g)?.length || 0; 43 | if ( 44 | // folder 45 | file.type === "folder" && 46 | normalPath !== pwd && 47 | normalPathSlashes === pwdPathSlashes && 48 | normalPath.startsWith(pwd) 49 | ) { 50 | currentFiles.push({ 51 | text: file.name, 52 | color: getFileColor(file.type), 53 | weight: getFileWeight(file.type), 54 | }); 55 | } else if ( 56 | // text files 57 | file.type !== "folder" && 58 | pwd.slice(0, -1) === normalPath && 59 | pwdPathSlashes - normalPathSlashes === 1 60 | ) { 61 | currentFiles.push({ 62 | text: file.name, 63 | color: getFileColor(file.type), 64 | weight: getFileWeight(file.type), 65 | }); 66 | } 67 | } 68 | store.endCurrentCommand(currentFiles); 69 | }; 70 | 71 | export default ls; 72 | -------------------------------------------------------------------------------- /src/components/TerminalInput.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | 12 | 13 | 14 | 65 | 66 | 96 | -------------------------------------------------------------------------------- /src/components/TerminalHistory.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | {{ item.command }} 9 | 14 | 15 | 20 | 21 | {{ output.text }} 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 35 | 36 | 106 | -------------------------------------------------------------------------------- /src/commands/common.ts: -------------------------------------------------------------------------------- 1 | import { useTerminalStore } from "@/stores/terminal"; 2 | import filesystem from "@/config/filesystem"; 3 | 4 | export enum FileStatus { 5 | EXIST = "exist", 6 | NOT_EXIST = "not exist", 7 | TOO_COMPLEX = "path too complicated", 8 | } 9 | 10 | export interface FileStatusValue { 11 | type?: "folder" | "file" | "link"; 12 | path: string; 13 | status: FileStatus; 14 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 15 | content?: any; 16 | } 17 | 18 | export const getAbsolutePath = (path: string): string | FileStatus => { 19 | const store = useTerminalStore(); 20 | if (path === "." || path === "./") { 21 | return store.pwd; 22 | } 23 | if (path === ".." || path === "../") { 24 | if (store.pwd === "~") return "~"; 25 | return store.pwd.slice(0, store.pwd.lastIndexOf("/")); 26 | } 27 | if (path.startsWith("../")) { 28 | return FileStatus.TOO_COMPLEX; 29 | } 30 | if (path === "~" || path === "/" || path === "~/" || path.trim() === "") { 31 | return "~"; 32 | } 33 | if (path.endsWith("/")) { 34 | path = path.slice(0, -1); 35 | } 36 | if (path.startsWith("/")) { 37 | return "~/" + path.slice(1); 38 | } 39 | if (path.startsWith("./")) { 40 | return `${store.pwd}/${path.slice(2)}`; 41 | } 42 | return `${store.pwd}/${path}`; 43 | }; 44 | 45 | export const checkFileStatus = (path: string): FileStatusValue => { 46 | const newPath = getAbsolutePath(path); 47 | if ( 48 | (path.match(/\./g)?.length || 0) >= 4 || 49 | newPath === FileStatus.TOO_COMPLEX 50 | ) { 51 | return { 52 | status: FileStatus.TOO_COMPLEX, 53 | path: "", 54 | }; 55 | } 56 | if (newPath === "~") { 57 | return { 58 | status: FileStatus.EXIST, 59 | type: "folder", 60 | path: "~", 61 | }; 62 | } 63 | for (let i = 0; i < filesystem.length; i++) { 64 | const file = filesystem[i]; 65 | const normalPath = file.path.slice( 66 | 0, 67 | file.path[file.path.length - 1] === "/" ? -1 : undefined 68 | ); 69 | if (normalPath === newPath && file.type === "folder") { 70 | return { 71 | status: FileStatus.EXIST, 72 | type: "folder", 73 | path: newPath, 74 | }; 75 | } else if ( 76 | file.type !== "folder" && 77 | `${normalPath}/${file.name}` === newPath 78 | ) { 79 | return { 80 | status: FileStatus.EXIST, 81 | type: file.type, 82 | path: `${normalPath}/${file.name}`, 83 | content: file.content, 84 | }; 85 | } 86 | } 87 | return { 88 | status: FileStatus.NOT_EXIST, 89 | path: "", 90 | }; 91 | }; 92 | -------------------------------------------------------------------------------- /src/styles/markdown.scss: -------------------------------------------------------------------------------- 1 | @import "@/styles/variables.scss"; 2 | @import "@/styles/typography.scss"; 3 | 4 | .markdown-content { 5 | & h1 { 6 | font-size: $font-regular; 7 | margin: 0px; 8 | 9 | &::before { 10 | content: "#"; 11 | color: $heading-before; 12 | margin-right: 10px; 13 | } 14 | } 15 | 16 | & h2 { 17 | font-size: $font-regular; 18 | margin: 0px; 19 | &::before { 20 | content: "##"; 21 | color: $heading-before; 22 | margin-right: 10px; 23 | } 24 | } 25 | 26 | & h3 { 27 | font-size: $font-regular; 28 | margin: 0px; 29 | &::before { 30 | content: "###"; 31 | color: $heading-before; 32 | margin-right: 10px; 33 | } 34 | } 35 | 36 | & h4 { 37 | font-size: $font-regular; 38 | margin: 0px; 39 | &::before { 40 | content: "####"; 41 | color: $heading-before; 42 | margin-right: 10px; 43 | } 44 | } 45 | 46 | & h5 { 47 | font-size: $font-regular; 48 | margin: 0px; 49 | &::before { 50 | content: "#####"; 51 | color: $heading-before; 52 | margin-right: 10px; 53 | } 54 | } 55 | 56 | & p { 57 | margin: 0px; 58 | } 59 | 60 | & code { 61 | font-family: "Fira Code", monospace; 62 | 63 | &::before { 64 | content: "`"; 65 | } 66 | 67 | &::after { 68 | content: "`"; 69 | } 70 | } 71 | 72 | & pre code { 73 | font-family: "Fira Code", monospace; 74 | 75 | &::before, 76 | &::after { 77 | content: ""; 78 | } 79 | } 80 | 81 | & a { 82 | margin: 0px !important; 83 | color: $link; 84 | text-decoration: $link-decoration; 85 | word-break: break-word; 86 | 87 | &:hover { 88 | text-decoration: $link-decoration-hover; 89 | } 90 | } 91 | 92 | & ul { 93 | margin: 0px; 94 | padding-left: 8px; 95 | margin: 10px 0px 10px 0px; 96 | 97 | & li { 98 | list-style-type: none; 99 | 100 | &::before { 101 | content: "*"; 102 | margin-right: 10px; 103 | display: inline; 104 | } 105 | 106 | & p:first-child { 107 | margin: 0px; 108 | display: inline; 109 | } 110 | 111 | & *:not(:first-child) { 112 | margin-left: 20px; 113 | } 114 | } 115 | } 116 | 117 | & table { 118 | margin: 10px 0px 10px 0px; 119 | padding: 0px; 120 | 121 | & thead, 122 | & tbody { 123 | & th, 124 | & td { 125 | padding: 0px 15px 0px 0px; 126 | } 127 | } 128 | 129 | border: none; 130 | } 131 | 132 | hr { 133 | border: 1px solid $foreground; 134 | 135 | margin: 15px 0px 15px 0px; 136 | } 137 | } 138 | -------------------------------------------------------------------------------- /src/styles/normalize.scss: -------------------------------------------------------------------------------- 1 | /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ 2 | 3 | /* Document 4 | ========================================================================== */ 5 | 6 | /** 7 | * 1. Correct the line height in all browsers. 8 | * 2. Prevent adjustments of font size after orientation changes in iOS. 9 | */ 10 | 11 | html { 12 | line-height: 1.15; /* 1 */ 13 | -webkit-text-size-adjust: 100%; /* 2 */ 14 | } 15 | 16 | /* Sections 17 | ========================================================================== */ 18 | 19 | /** 20 | * Remove the margin in all browsers. 21 | */ 22 | 23 | body { 24 | margin: 0; 25 | } 26 | 27 | /** 28 | * Render the `main` element consistently in IE. 29 | */ 30 | 31 | main { 32 | display: block; 33 | } 34 | 35 | /** 36 | * Correct the font size and margin on `h1` elements within `section` and 37 | * `article` contexts in Chrome, Firefox, and Safari. 38 | */ 39 | 40 | h1 { 41 | font-size: 2em; 42 | margin: 0.67em 0; 43 | } 44 | 45 | /* Grouping content 46 | ========================================================================== */ 47 | 48 | /** 49 | * 1. Add the correct box sizing in Firefox. 50 | * 2. Show the overflow in Edge and IE. 51 | */ 52 | 53 | hr { 54 | box-sizing: content-box; /* 1 */ 55 | height: 0; /* 1 */ 56 | overflow: visible; /* 2 */ 57 | } 58 | 59 | /** 60 | * 1. Correct the inheritance and scaling of font size in all browsers. 61 | * 2. Correct the odd `em` font sizing in all browsers. 62 | */ 63 | 64 | pre { 65 | font-family: monospace, monospace; /* 1 */ 66 | font-size: 1em; /* 2 */ 67 | } 68 | 69 | /* Text-level semantics 70 | ========================================================================== */ 71 | 72 | /** 73 | * Remove the gray background on active links in IE 10. 74 | */ 75 | 76 | a { 77 | background-color: transparent; 78 | } 79 | 80 | /** 81 | * 1. Remove the bottom border in Chrome 57- 82 | * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. 83 | */ 84 | 85 | abbr[title] { 86 | border-bottom: none; /* 1 */ 87 | text-decoration: underline; /* 2 */ 88 | text-decoration: underline dotted; /* 2 */ 89 | } 90 | 91 | /** 92 | * Add the correct font weight in Chrome, Edge, and Safari. 93 | */ 94 | 95 | b, 96 | strong { 97 | font-weight: bolder; 98 | } 99 | 100 | /** 101 | * 1. Correct the inheritance and scaling of font size in all browsers. 102 | * 2. Correct the odd `em` font sizing in all browsers. 103 | */ 104 | 105 | code, 106 | kbd, 107 | samp { 108 | font-family: monospace, monospace; /* 1 */ 109 | font-size: 1em; /* 2 */ 110 | } 111 | 112 | /** 113 | * Add the correct font size in all browsers. 114 | */ 115 | 116 | small { 117 | font-size: 80%; 118 | } 119 | 120 | /** 121 | * Prevent `sub` and `sup` elements from affecting the line height in 122 | * all browsers. 123 | */ 124 | 125 | sub, 126 | sup { 127 | font-size: 75%; 128 | line-height: 0; 129 | position: relative; 130 | vertical-align: baseline; 131 | } 132 | 133 | sub { 134 | bottom: -0.25em; 135 | } 136 | 137 | sup { 138 | top: -0.5em; 139 | } 140 | 141 | /* Embedded content 142 | ========================================================================== */ 143 | 144 | /** 145 | * Remove the border on images inside links in IE 10. 146 | */ 147 | 148 | img { 149 | border-style: none; 150 | } 151 | 152 | /* Forms 153 | ========================================================================== */ 154 | 155 | /** 156 | * 1. Change the font styles in all browsers. 157 | * 2. Remove the margin in Firefox and Safari. 158 | */ 159 | 160 | button, 161 | input, 162 | optgroup, 163 | select, 164 | textarea { 165 | font-family: inherit; /* 1 */ 166 | font-size: 100%; /* 1 */ 167 | line-height: 1.15; /* 1 */ 168 | margin: 0; /* 2 */ 169 | } 170 | 171 | /** 172 | * Show the overflow in IE. 173 | * 1. Show the overflow in Edge. 174 | */ 175 | 176 | button, 177 | input { /* 1 */ 178 | overflow: visible; 179 | } 180 | 181 | /** 182 | * Remove the inheritance of text transform in Edge, Firefox, and IE. 183 | * 1. Remove the inheritance of text transform in Firefox. 184 | */ 185 | 186 | button, 187 | select { /* 1 */ 188 | text-transform: none; 189 | } 190 | 191 | /** 192 | * Correct the inability to style clickable types in iOS and Safari. 193 | */ 194 | 195 | button, 196 | [type="button"], 197 | [type="reset"], 198 | [type="submit"] { 199 | -webkit-appearance: button; 200 | } 201 | 202 | /** 203 | * Remove the inner border and padding in Firefox. 204 | */ 205 | 206 | button::-moz-focus-inner, 207 | [type="button"]::-moz-focus-inner, 208 | [type="reset"]::-moz-focus-inner, 209 | [type="submit"]::-moz-focus-inner { 210 | border-style: none; 211 | padding: 0; 212 | } 213 | 214 | /** 215 | * Restore the focus styles unset by the previous rule. 216 | */ 217 | 218 | button:-moz-focusring, 219 | [type="button"]:-moz-focusring, 220 | [type="reset"]:-moz-focusring, 221 | [type="submit"]:-moz-focusring { 222 | outline: 1px dotted ButtonText; 223 | } 224 | 225 | /** 226 | * Correct the padding in Firefox. 227 | */ 228 | 229 | fieldset { 230 | padding: 0.35em 0.75em 0.625em; 231 | } 232 | 233 | /** 234 | * 1. Correct the text wrapping in Edge and IE. 235 | * 2. Correct the color inheritance from `fieldset` elements in IE. 236 | * 3. Remove the padding so developers are not caught out when they zero out 237 | * `fieldset` elements in all browsers. 238 | */ 239 | 240 | legend { 241 | box-sizing: border-box; /* 1 */ 242 | color: inherit; /* 2 */ 243 | display: table; /* 1 */ 244 | max-width: 100%; /* 1 */ 245 | padding: 0; /* 3 */ 246 | white-space: normal; /* 1 */ 247 | } 248 | 249 | /** 250 | * Add the correct vertical alignment in Chrome, Firefox, and Opera. 251 | */ 252 | 253 | progress { 254 | vertical-align: baseline; 255 | } 256 | 257 | /** 258 | * Remove the default vertical scrollbar in IE 10+. 259 | */ 260 | 261 | textarea { 262 | overflow: auto; 263 | } 264 | 265 | /** 266 | * 1. Add the correct box sizing in IE 10. 267 | * 2. Remove the padding in IE 10. 268 | */ 269 | 270 | [type="checkbox"], 271 | [type="radio"] { 272 | box-sizing: border-box; /* 1 */ 273 | padding: 0; /* 2 */ 274 | } 275 | 276 | /** 277 | * Correct the cursor style of increment and decrement buttons in Chrome. 278 | */ 279 | 280 | [type="number"]::-webkit-inner-spin-button, 281 | [type="number"]::-webkit-outer-spin-button { 282 | height: auto; 283 | } 284 | 285 | /** 286 | * 1. Correct the odd appearance in Chrome and Safari. 287 | * 2. Correct the outline style in Safari. 288 | */ 289 | 290 | [type="search"] { 291 | -webkit-appearance: textfield; /* 1 */ 292 | outline-offset: -2px; /* 2 */ 293 | } 294 | 295 | /** 296 | * Remove the inner padding in Chrome and Safari on macOS. 297 | */ 298 | 299 | [type="search"]::-webkit-search-decoration { 300 | -webkit-appearance: none; 301 | } 302 | 303 | /** 304 | * 1. Correct the inability to style clickable types in iOS and Safari. 305 | * 2. Change font properties to `inherit` in Safari. 306 | */ 307 | 308 | ::-webkit-file-upload-button { 309 | -webkit-appearance: button; /* 1 */ 310 | font: inherit; /* 2 */ 311 | } 312 | 313 | /* Interactive 314 | ========================================================================== */ 315 | 316 | /* 317 | * Add the correct display in Edge, IE 10+, and Firefox. 318 | */ 319 | 320 | details { 321 | display: block; 322 | } 323 | 324 | /* 325 | * Add the correct display in all browsers. 326 | */ 327 | 328 | summary { 329 | display: list-item; 330 | } 331 | 332 | /* Misc 333 | ========================================================================== */ 334 | 335 | /** 336 | * Add the correct display in IE 10+. 337 | */ 338 | 339 | template { 340 | display: none; 341 | } 342 | 343 | /** 344 | * Add the correct display in IE 10. 345 | */ 346 | 347 | [hidden] { 348 | display: none; 349 | } -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.3 2 | 3 | specifiers: 4 | '@rushstack/eslint-patch': ^1.1.0 5 | '@types/markdown-it': ^12.2.3 6 | '@types/markdown-it-link-attributes': ^3.0.1 7 | '@types/node': ^16.11.27 8 | '@vitejs/plugin-vue': ^2.3.1 9 | '@vue/eslint-config-prettier': ^7.0.0 10 | '@vue/eslint-config-typescript': ^10.0.0 11 | '@vue/tsconfig': ^0.1.3 12 | eslint: ^8.16.0 13 | eslint-plugin-vue: ^8.7.1 14 | highlight.js: ^11.5.1 15 | markdown-it: ^13.0.1 16 | markdown-it-highlightjs: ^4.0.1 17 | markdown-it-link-attributes: ^4.0.0 18 | pinia: ^2.0.13 19 | prettier: ^2.5.1 20 | sass: ^1.52.1 21 | typescript: ~4.6.3 22 | vite: ^2.9.5 23 | vite-plugin-dynamic-import: ^0.9.6 24 | vite-plugin-markdown: ^2.0.2 25 | vue: ^3.2.33 26 | vue-router: ^4.0.14 27 | vue-tsc: ^0.34.7 28 | 29 | dependencies: 30 | highlight.js: 11.5.1 31 | markdown-it: 13.0.1 32 | markdown-it-highlightjs: 4.0.1 33 | markdown-it-link-attributes: 4.0.0 34 | pinia: 2.0.14_typescript@4.6.4+vue@3.2.36 35 | vue: 3.2.36 36 | vue-router: 4.0.15_vue@3.2.36 37 | 38 | devDependencies: 39 | '@rushstack/eslint-patch': 1.1.3 40 | '@types/markdown-it': 12.2.3 41 | '@types/markdown-it-link-attributes': 3.0.1 42 | '@types/node': 16.11.36 43 | '@vitejs/plugin-vue': 2.3.3_vite@2.9.9+vue@3.2.36 44 | '@vue/eslint-config-prettier': 7.0.0_eslint@8.16.0+prettier@2.6.2 45 | '@vue/eslint-config-typescript': 10.0.0_f92e8606ed7532a0a42c7470d9dcbacd 46 | '@vue/tsconfig': 0.1.3_@types+node@16.11.36 47 | eslint: 8.16.0 48 | eslint-plugin-vue: 8.7.1_eslint@8.16.0 49 | prettier: 2.6.2 50 | sass: 1.52.1 51 | typescript: 4.6.4 52 | vite: 2.9.9_sass@1.52.1 53 | vite-plugin-dynamic-import: 0.9.6 54 | vite-plugin-markdown: 2.0.2_vite@2.9.9 55 | vue-tsc: 0.34.16_typescript@4.6.4 56 | 57 | packages: 58 | 59 | /@babel/parser/7.18.3: 60 | resolution: {integrity: sha512-rL50YcEuHbbauAFAysNsJA4/f89fGTOBRNs9P81sniKnKAr4xULe5AecolcsKbi88xu0ByWYDj/S1AJ3FSFuSQ==} 61 | engines: {node: '>=6.0.0'} 62 | hasBin: true 63 | 64 | /@eslint/eslintrc/1.3.0: 65 | resolution: {integrity: sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==} 66 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 67 | dependencies: 68 | ajv: 6.12.6 69 | debug: 4.3.4 70 | espree: 9.3.2 71 | globals: 13.15.0 72 | ignore: 5.2.0 73 | import-fresh: 3.3.0 74 | js-yaml: 4.1.0 75 | minimatch: 3.1.2 76 | strip-json-comments: 3.1.1 77 | transitivePeerDependencies: 78 | - supports-color 79 | dev: true 80 | 81 | /@humanwhocodes/config-array/0.9.5: 82 | resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==} 83 | engines: {node: '>=10.10.0'} 84 | dependencies: 85 | '@humanwhocodes/object-schema': 1.2.1 86 | debug: 4.3.4 87 | minimatch: 3.1.2 88 | transitivePeerDependencies: 89 | - supports-color 90 | dev: true 91 | 92 | /@humanwhocodes/object-schema/1.2.1: 93 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 94 | dev: true 95 | 96 | /@nodelib/fs.scandir/2.1.5: 97 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 98 | engines: {node: '>= 8'} 99 | dependencies: 100 | '@nodelib/fs.stat': 2.0.5 101 | run-parallel: 1.2.0 102 | dev: true 103 | 104 | /@nodelib/fs.stat/2.0.5: 105 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 106 | engines: {node: '>= 8'} 107 | dev: true 108 | 109 | /@nodelib/fs.walk/1.2.8: 110 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 111 | engines: {node: '>= 8'} 112 | dependencies: 113 | '@nodelib/fs.scandir': 2.1.5 114 | fastq: 1.13.0 115 | dev: true 116 | 117 | /@rushstack/eslint-patch/1.1.3: 118 | resolution: {integrity: sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw==} 119 | dev: true 120 | 121 | /@types/json-schema/7.0.11: 122 | resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} 123 | dev: true 124 | 125 | /@types/linkify-it/3.0.2: 126 | resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==} 127 | dev: true 128 | 129 | /@types/markdown-it-link-attributes/3.0.1: 130 | resolution: {integrity: sha512-K8RnNb1q8j7rDOJbMF7AnlhCC/45BjrQ8z3WZWOrvkBIl8u9RXvmBdG/hfpnmK1JhhEZcmFEKWt+ilW1Mly+2Q==} 131 | dependencies: 132 | '@types/markdown-it': 12.2.3 133 | dev: true 134 | 135 | /@types/markdown-it/12.2.3: 136 | resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==} 137 | dependencies: 138 | '@types/linkify-it': 3.0.2 139 | '@types/mdurl': 1.0.2 140 | dev: true 141 | 142 | /@types/mdurl/1.0.2: 143 | resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==} 144 | dev: true 145 | 146 | /@types/node/16.11.36: 147 | resolution: {integrity: sha512-FR5QJe+TaoZ2GsMHkjuwoNabr+UrJNRr2HNOo+r/7vhcuntM6Ee/pRPOnRhhL2XE9OOvX9VLEq+BcXl3VjNoWA==} 148 | dev: true 149 | 150 | /@typescript-eslint/eslint-plugin/5.26.0_3538258888b78689808cec7bffc2237a: 151 | resolution: {integrity: sha512-oGCmo0PqnRZZndr+KwvvAUvD3kNE4AfyoGCwOZpoCncSh4MVD06JTE8XQa2u9u+NX5CsyZMBTEc2C72zx38eYA==} 152 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 153 | peerDependencies: 154 | '@typescript-eslint/parser': ^5.0.0 155 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 156 | typescript: '*' 157 | peerDependenciesMeta: 158 | typescript: 159 | optional: true 160 | dependencies: 161 | '@typescript-eslint/parser': 5.26.0_eslint@8.16.0+typescript@4.6.4 162 | '@typescript-eslint/scope-manager': 5.26.0 163 | '@typescript-eslint/type-utils': 5.26.0_eslint@8.16.0+typescript@4.6.4 164 | '@typescript-eslint/utils': 5.26.0_eslint@8.16.0+typescript@4.6.4 165 | debug: 4.3.4 166 | eslint: 8.16.0 167 | functional-red-black-tree: 1.0.1 168 | ignore: 5.2.0 169 | regexpp: 3.2.0 170 | semver: 7.3.7 171 | tsutils: 3.21.0_typescript@4.6.4 172 | typescript: 4.6.4 173 | transitivePeerDependencies: 174 | - supports-color 175 | dev: true 176 | 177 | /@typescript-eslint/parser/5.26.0_eslint@8.16.0+typescript@4.6.4: 178 | resolution: {integrity: sha512-n/IzU87ttzIdnAH5vQ4BBDnLPly7rC5VnjN3m0xBG82HK6rhRxnCb3w/GyWbNDghPd+NktJqB/wl6+YkzZ5T5Q==} 179 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 180 | peerDependencies: 181 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 182 | typescript: '*' 183 | peerDependenciesMeta: 184 | typescript: 185 | optional: true 186 | dependencies: 187 | '@typescript-eslint/scope-manager': 5.26.0 188 | '@typescript-eslint/types': 5.26.0 189 | '@typescript-eslint/typescript-estree': 5.26.0_typescript@4.6.4 190 | debug: 4.3.4 191 | eslint: 8.16.0 192 | typescript: 4.6.4 193 | transitivePeerDependencies: 194 | - supports-color 195 | dev: true 196 | 197 | /@typescript-eslint/scope-manager/5.26.0: 198 | resolution: {integrity: sha512-gVzTJUESuTwiju/7NiTb4c5oqod8xt5GhMbExKsCTp6adU3mya6AGJ4Pl9xC7x2DX9UYFsjImC0mA62BCY22Iw==} 199 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 200 | dependencies: 201 | '@typescript-eslint/types': 5.26.0 202 | '@typescript-eslint/visitor-keys': 5.26.0 203 | dev: true 204 | 205 | /@typescript-eslint/type-utils/5.26.0_eslint@8.16.0+typescript@4.6.4: 206 | resolution: {integrity: sha512-7ccbUVWGLmcRDSA1+ADkDBl5fP87EJt0fnijsMFTVHXKGduYMgienC/i3QwoVhDADUAPoytgjbZbCOMj4TY55A==} 207 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 208 | peerDependencies: 209 | eslint: '*' 210 | typescript: '*' 211 | peerDependenciesMeta: 212 | typescript: 213 | optional: true 214 | dependencies: 215 | '@typescript-eslint/utils': 5.26.0_eslint@8.16.0+typescript@4.6.4 216 | debug: 4.3.4 217 | eslint: 8.16.0 218 | tsutils: 3.21.0_typescript@4.6.4 219 | typescript: 4.6.4 220 | transitivePeerDependencies: 221 | - supports-color 222 | dev: true 223 | 224 | /@typescript-eslint/types/5.26.0: 225 | resolution: {integrity: sha512-8794JZFE1RN4XaExLWLI2oSXsVImNkl79PzTOOWt9h0UHROwJedNOD2IJyfL0NbddFllcktGIO2aOu10avQQyA==} 226 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 227 | dev: true 228 | 229 | /@typescript-eslint/typescript-estree/5.26.0_typescript@4.6.4: 230 | resolution: {integrity: sha512-EyGpw6eQDsfD6jIqmXP3rU5oHScZ51tL/cZgFbFBvWuCwrIptl+oueUZzSmLtxFuSOQ9vDcJIs+279gnJkfd1w==} 231 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 232 | peerDependencies: 233 | typescript: '*' 234 | peerDependenciesMeta: 235 | typescript: 236 | optional: true 237 | dependencies: 238 | '@typescript-eslint/types': 5.26.0 239 | '@typescript-eslint/visitor-keys': 5.26.0 240 | debug: 4.3.4 241 | globby: 11.1.0 242 | is-glob: 4.0.3 243 | semver: 7.3.7 244 | tsutils: 3.21.0_typescript@4.6.4 245 | typescript: 4.6.4 246 | transitivePeerDependencies: 247 | - supports-color 248 | dev: true 249 | 250 | /@typescript-eslint/utils/5.26.0_eslint@8.16.0+typescript@4.6.4: 251 | resolution: {integrity: sha512-PJFwcTq2Pt4AMOKfe3zQOdez6InIDOjUJJD3v3LyEtxHGVVRK3Vo7Dd923t/4M9hSH2q2CLvcTdxlLPjcIk3eg==} 252 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 253 | peerDependencies: 254 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 255 | dependencies: 256 | '@types/json-schema': 7.0.11 257 | '@typescript-eslint/scope-manager': 5.26.0 258 | '@typescript-eslint/types': 5.26.0 259 | '@typescript-eslint/typescript-estree': 5.26.0_typescript@4.6.4 260 | eslint: 8.16.0 261 | eslint-scope: 5.1.1 262 | eslint-utils: 3.0.0_eslint@8.16.0 263 | transitivePeerDependencies: 264 | - supports-color 265 | - typescript 266 | dev: true 267 | 268 | /@typescript-eslint/visitor-keys/5.26.0: 269 | resolution: {integrity: sha512-wei+ffqHanYDOQgg/fS6Hcar6wAWv0CUPQ3TZzOWd2BLfgP539rb49bwua8WRAs7R6kOSLn82rfEu2ro6Llt8Q==} 270 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 271 | dependencies: 272 | '@typescript-eslint/types': 5.26.0 273 | eslint-visitor-keys: 3.3.0 274 | dev: true 275 | 276 | /@vitejs/plugin-vue/2.3.3_vite@2.9.9+vue@3.2.36: 277 | resolution: {integrity: sha512-SmQLDyhz+6lGJhPELsBdzXGc+AcaT8stgkbiTFGpXPe8Tl1tJaBw1A6pxDqDuRsVkD8uscrkx3hA7QDOoKYtyw==} 278 | engines: {node: '>=12.0.0'} 279 | peerDependencies: 280 | vite: ^2.5.10 281 | vue: ^3.2.25 282 | dependencies: 283 | vite: 2.9.9_sass@1.52.1 284 | vue: 3.2.36 285 | dev: true 286 | 287 | /@volar/code-gen/0.34.16: 288 | resolution: {integrity: sha512-ep5us1iF66WlwzCFjTHMIdULIHzu6661228NknkSBGEAh878GPO+AgUqyQn9tY+al0KrsLuDRQVt6pwmeLoqwQ==} 289 | dependencies: 290 | '@volar/source-map': 0.34.16 291 | dev: true 292 | 293 | /@volar/source-map/0.34.16: 294 | resolution: {integrity: sha512-50F1XWcVRzKVXqwO7J39hZ4qd/htzHj62dsywz7FfhZZSOaQ43XT3uEy7cBAVgw7gs+qChFaUJAhM1iHb0FyOQ==} 295 | dev: true 296 | 297 | /@volar/vue-code-gen/0.34.16: 298 | resolution: {integrity: sha512-R8OGn26pCQsctXLa6mZi3BIkyXemcrhibTRGrVh1z2TqWMtnCIT/NiAYXR7kAH4UzFEpglOJAIxrjwnodJ7x6w==} 299 | dependencies: 300 | '@volar/code-gen': 0.34.16 301 | '@volar/source-map': 0.34.16 302 | '@vue/compiler-core': 3.2.36 303 | '@vue/compiler-dom': 3.2.36 304 | '@vue/shared': 3.2.36 305 | dev: true 306 | 307 | /@volar/vue-typescript/0.34.16: 308 | resolution: {integrity: sha512-Jmo19pKRJAIhbAmr/1974knqKws9FZlnYWuCDvvg9wimKHTFosjDhDysORIMVHZ97og/0idK70iIKbcsyDadvw==} 309 | dependencies: 310 | '@volar/code-gen': 0.34.16 311 | '@volar/source-map': 0.34.16 312 | '@volar/vue-code-gen': 0.34.16 313 | '@vue/compiler-sfc': 3.2.36 314 | '@vue/reactivity': 3.2.36 315 | dev: true 316 | 317 | /@vue/compiler-core/3.2.36: 318 | resolution: {integrity: sha512-bbyZM5hvBicv0PW3KUfVi+x3ylHnfKG7DOn5wM+f2OztTzTjLEyBb/5yrarIYpmnGitVGbjZqDbODyW4iK8hqw==} 319 | dependencies: 320 | '@babel/parser': 7.18.3 321 | '@vue/shared': 3.2.36 322 | estree-walker: 2.0.2 323 | source-map: 0.6.1 324 | 325 | /@vue/compiler-dom/3.2.36: 326 | resolution: {integrity: sha512-tcOTAOiW4s24QLnq+ON6J+GRONXJ+A/mqKCORi0LSlIh8XQlNnlm24y8xIL8la+ZDgkdbjarQ9ZqYSvEja6gVA==} 327 | dependencies: 328 | '@vue/compiler-core': 3.2.36 329 | '@vue/shared': 3.2.36 330 | 331 | /@vue/compiler-sfc/3.2.36: 332 | resolution: {integrity: sha512-AvGb4bTj4W8uQ4BqaSxo7UwTEqX5utdRSMyHy58OragWlt8nEACQ9mIeQh3K4di4/SX+41+pJrLIY01lHAOFOA==} 333 | dependencies: 334 | '@babel/parser': 7.18.3 335 | '@vue/compiler-core': 3.2.36 336 | '@vue/compiler-dom': 3.2.36 337 | '@vue/compiler-ssr': 3.2.36 338 | '@vue/reactivity-transform': 3.2.36 339 | '@vue/shared': 3.2.36 340 | estree-walker: 2.0.2 341 | magic-string: 0.25.9 342 | postcss: 8.4.14 343 | source-map: 0.6.1 344 | 345 | /@vue/compiler-ssr/3.2.36: 346 | resolution: {integrity: sha512-+KugInUFRvOxEdLkZwE+W43BqHyhBh0jpYXhmqw1xGq2dmE6J9eZ8UUSOKNhdHtQ/iNLWWeK/wPZkVLUf3YGaw==} 347 | dependencies: 348 | '@vue/compiler-dom': 3.2.36 349 | '@vue/shared': 3.2.36 350 | 351 | /@vue/devtools-api/6.1.4: 352 | resolution: {integrity: sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ==} 353 | dev: false 354 | 355 | /@vue/eslint-config-prettier/7.0.0_eslint@8.16.0+prettier@2.6.2: 356 | resolution: {integrity: sha512-/CTc6ML3Wta1tCe1gUeO0EYnVXfo3nJXsIhZ8WJr3sov+cGASr6yuiibJTL6lmIBm7GobopToOuB3B6AWyV0Iw==} 357 | peerDependencies: 358 | eslint: '>= 7.28.0' 359 | prettier: '>= 2.0.0' 360 | dependencies: 361 | eslint: 8.16.0 362 | eslint-config-prettier: 8.5.0_eslint@8.16.0 363 | eslint-plugin-prettier: 4.0.0_4fe3201cd09a8826bbd8050f2348cb2f 364 | prettier: 2.6.2 365 | dev: true 366 | 367 | /@vue/eslint-config-typescript/10.0.0_f92e8606ed7532a0a42c7470d9dcbacd: 368 | resolution: {integrity: sha512-F94cL8ug3FaYXlCfU5/wiGjk1qeadmoBpRGAOBq+qre3Smdupa59dd6ZJrsfRODpsMPyTG7330juMDsUvpZ3Rw==} 369 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 370 | peerDependencies: 371 | eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 372 | eslint-plugin-vue: ^8.0.1 373 | dependencies: 374 | '@typescript-eslint/eslint-plugin': 5.26.0_3538258888b78689808cec7bffc2237a 375 | '@typescript-eslint/parser': 5.26.0_eslint@8.16.0+typescript@4.6.4 376 | eslint: 8.16.0 377 | eslint-plugin-vue: 8.7.1_eslint@8.16.0 378 | vue-eslint-parser: 8.3.0_eslint@8.16.0 379 | transitivePeerDependencies: 380 | - supports-color 381 | - typescript 382 | dev: true 383 | 384 | /@vue/reactivity-transform/3.2.36: 385 | resolution: {integrity: sha512-Jk5o2BhpODC9XTA7o4EL8hSJ4JyrFWErLtClG3NH8wDS7ri9jBDWxI7/549T7JY9uilKsaNM+4pJASLj5dtRwA==} 386 | dependencies: 387 | '@babel/parser': 7.18.3 388 | '@vue/compiler-core': 3.2.36 389 | '@vue/shared': 3.2.36 390 | estree-walker: 2.0.2 391 | magic-string: 0.25.9 392 | 393 | /@vue/reactivity/3.2.36: 394 | resolution: {integrity: sha512-c2qvopo0crh9A4GXi2/2kfGYMxsJW4tVILrqRPydVGZHhq0fnzy6qmclWOhBFckEhmyxmpHpdJtIRYGeKcuhnA==} 395 | dependencies: 396 | '@vue/shared': 3.2.36 397 | 398 | /@vue/runtime-core/3.2.36: 399 | resolution: {integrity: sha512-PTWBD+Lub+1U3/KhbCExrfxyS14hstLX+cBboxVHaz+kXoiDLNDEYAovPtxeTutbqtClIXtft+wcGdC+FUQ9qQ==} 400 | dependencies: 401 | '@vue/reactivity': 3.2.36 402 | '@vue/shared': 3.2.36 403 | dev: false 404 | 405 | /@vue/runtime-dom/3.2.36: 406 | resolution: {integrity: sha512-gYPYblm7QXHVuBohqNRRT7Wez0f2Mx2D40rb4fleehrJU9CnkjG0phhcGEZFfGwCmHZRqBCRgbFWE98bPULqkg==} 407 | dependencies: 408 | '@vue/runtime-core': 3.2.36 409 | '@vue/shared': 3.2.36 410 | csstype: 2.6.20 411 | dev: false 412 | 413 | /@vue/server-renderer/3.2.36_vue@3.2.36: 414 | resolution: {integrity: sha512-uZE0+jfye6yYXWvAQYeHZv+f50sRryvy16uiqzk3jn8hEY8zTjI+rzlmZSGoE915k+W/Ol9XSw6vxOUD8dGkUg==} 415 | peerDependencies: 416 | vue: 3.2.36 417 | dependencies: 418 | '@vue/compiler-ssr': 3.2.36 419 | '@vue/shared': 3.2.36 420 | vue: 3.2.36 421 | dev: false 422 | 423 | /@vue/shared/3.2.36: 424 | resolution: {integrity: sha512-JtB41wXl7Au3+Nl3gD16Cfpj7k/6aCroZ6BbOiCMFCMvrOpkg/qQUXTso2XowaNqBbnkuGHurLAqkLBxNGc1hQ==} 425 | 426 | /@vue/tsconfig/0.1.3_@types+node@16.11.36: 427 | resolution: {integrity: sha512-kQVsh8yyWPvHpb8gIc9l/HIDiiVUy1amynLNpCy8p+FoCiZXCo6fQos5/097MmnNZc9AtseDsCrfkhqCrJ8Olg==} 428 | peerDependencies: 429 | '@types/node': '*' 430 | peerDependenciesMeta: 431 | '@types/node': 432 | optional: true 433 | dependencies: 434 | '@types/node': 16.11.36 435 | dev: true 436 | 437 | /acorn-jsx/5.3.2_acorn@8.7.1: 438 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 439 | peerDependencies: 440 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 441 | dependencies: 442 | acorn: 8.7.1 443 | dev: true 444 | 445 | /acorn-walk/8.2.0: 446 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} 447 | engines: {node: '>=0.4.0'} 448 | dev: true 449 | 450 | /acorn/8.7.1: 451 | resolution: {integrity: sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==} 452 | engines: {node: '>=0.4.0'} 453 | hasBin: true 454 | dev: true 455 | 456 | /ajv/6.12.6: 457 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 458 | dependencies: 459 | fast-deep-equal: 3.1.3 460 | fast-json-stable-stringify: 2.1.0 461 | json-schema-traverse: 0.4.1 462 | uri-js: 4.4.1 463 | dev: true 464 | 465 | /ansi-regex/5.0.1: 466 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 467 | engines: {node: '>=8'} 468 | dev: true 469 | 470 | /ansi-styles/4.3.0: 471 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 472 | engines: {node: '>=8'} 473 | dependencies: 474 | color-convert: 2.0.1 475 | dev: true 476 | 477 | /anymatch/3.1.2: 478 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} 479 | engines: {node: '>= 8'} 480 | dependencies: 481 | normalize-path: 3.0.0 482 | picomatch: 2.3.1 483 | dev: true 484 | 485 | /argparse/1.0.10: 486 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 487 | dependencies: 488 | sprintf-js: 1.0.3 489 | dev: true 490 | 491 | /argparse/2.0.1: 492 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 493 | 494 | /array-union/2.1.0: 495 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 496 | engines: {node: '>=8'} 497 | dev: true 498 | 499 | /balanced-match/1.0.2: 500 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 501 | dev: true 502 | 503 | /binary-extensions/2.2.0: 504 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 505 | engines: {node: '>=8'} 506 | dev: true 507 | 508 | /boolbase/1.0.0: 509 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} 510 | dev: true 511 | 512 | /brace-expansion/1.1.11: 513 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 514 | dependencies: 515 | balanced-match: 1.0.2 516 | concat-map: 0.0.1 517 | dev: true 518 | 519 | /braces/3.0.2: 520 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 521 | engines: {node: '>=8'} 522 | dependencies: 523 | fill-range: 7.0.1 524 | dev: true 525 | 526 | /callsites/3.1.0: 527 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 528 | engines: {node: '>=6'} 529 | dev: true 530 | 531 | /chalk/4.1.2: 532 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 533 | engines: {node: '>=10'} 534 | dependencies: 535 | ansi-styles: 4.3.0 536 | supports-color: 7.2.0 537 | dev: true 538 | 539 | /chokidar/3.5.3: 540 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 541 | engines: {node: '>= 8.10.0'} 542 | dependencies: 543 | anymatch: 3.1.2 544 | braces: 3.0.2 545 | glob-parent: 5.1.2 546 | is-binary-path: 2.1.0 547 | is-glob: 4.0.3 548 | normalize-path: 3.0.0 549 | readdirp: 3.6.0 550 | optionalDependencies: 551 | fsevents: 2.3.2 552 | dev: true 553 | 554 | /color-convert/2.0.1: 555 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 556 | engines: {node: '>=7.0.0'} 557 | dependencies: 558 | color-name: 1.1.4 559 | dev: true 560 | 561 | /color-name/1.1.4: 562 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 563 | dev: true 564 | 565 | /concat-map/0.0.1: 566 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 567 | dev: true 568 | 569 | /cross-spawn/7.0.3: 570 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 571 | engines: {node: '>= 8'} 572 | dependencies: 573 | path-key: 3.1.1 574 | shebang-command: 2.0.0 575 | which: 2.0.2 576 | dev: true 577 | 578 | /cssesc/3.0.0: 579 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 580 | engines: {node: '>=4'} 581 | hasBin: true 582 | dev: true 583 | 584 | /csstype/2.6.20: 585 | resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==} 586 | dev: false 587 | 588 | /debug/4.3.4: 589 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 590 | engines: {node: '>=6.0'} 591 | peerDependencies: 592 | supports-color: '*' 593 | peerDependenciesMeta: 594 | supports-color: 595 | optional: true 596 | dependencies: 597 | ms: 2.1.2 598 | dev: true 599 | 600 | /deep-is/0.1.4: 601 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 602 | dev: true 603 | 604 | /dir-glob/3.0.1: 605 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 606 | engines: {node: '>=8'} 607 | dependencies: 608 | path-type: 4.0.0 609 | dev: true 610 | 611 | /doctrine/3.0.0: 612 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 613 | engines: {node: '>=6.0.0'} 614 | dependencies: 615 | esutils: 2.0.3 616 | dev: true 617 | 618 | /dom-serializer/1.4.1: 619 | resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} 620 | dependencies: 621 | domelementtype: 2.3.0 622 | domhandler: 4.3.1 623 | entities: 2.2.0 624 | dev: true 625 | 626 | /domelementtype/2.3.0: 627 | resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} 628 | dev: true 629 | 630 | /domhandler/4.3.1: 631 | resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} 632 | engines: {node: '>= 4'} 633 | dependencies: 634 | domelementtype: 2.3.0 635 | dev: true 636 | 637 | /domutils/2.8.0: 638 | resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} 639 | dependencies: 640 | dom-serializer: 1.4.1 641 | domelementtype: 2.3.0 642 | domhandler: 4.3.1 643 | dev: true 644 | 645 | /entities/2.1.0: 646 | resolution: {integrity: sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==} 647 | dev: true 648 | 649 | /entities/2.2.0: 650 | resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} 651 | dev: true 652 | 653 | /entities/3.0.1: 654 | resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} 655 | engines: {node: '>=0.12'} 656 | dev: false 657 | 658 | /esbuild-android-64/0.14.40: 659 | resolution: {integrity: sha512-+69t+bmJWWhTyG8waJZcu4UGzM4NbDXAwssTEDYwonyz6L/Is11Y3csJhE16RM0a1GeDin0n810vNP+NVjttKA==} 660 | engines: {node: '>=12'} 661 | cpu: [x64] 662 | os: [android] 663 | requiresBuild: true 664 | dev: true 665 | optional: true 666 | 667 | /esbuild-android-arm64/0.14.40: 668 | resolution: {integrity: sha512-lVDn4d7/NL5Svrxuskmd/YcluI6uI4Ebp7A1/tWyLJJYbvfIy5l4Vy8GMhErGLePbRyJJiuBP9xusapK4u+6bg==} 669 | engines: {node: '>=12'} 670 | cpu: [arm64] 671 | os: [android] 672 | requiresBuild: true 673 | dev: true 674 | optional: true 675 | 676 | /esbuild-darwin-64/0.14.40: 677 | resolution: {integrity: sha512-b5u3IXCHhOjkRHIQTSxCN7ObUR5NTyJCP9LrnJ69dEEi1w1usI40T/VNyTTCs7n0UgEH7/zi27vBxbZU+sU4Ew==} 678 | engines: {node: '>=12'} 679 | cpu: [x64] 680 | os: [darwin] 681 | requiresBuild: true 682 | dev: true 683 | optional: true 684 | 685 | /esbuild-darwin-arm64/0.14.40: 686 | resolution: {integrity: sha512-Wn0C2nrZSANvzK9efcxjKpv9l8yUC4PtYMmnf775gUNwak7sqecuoelhbUTshhrwsfjCNfjsrUhsHY2OHUiEdw==} 687 | engines: {node: '>=12'} 688 | cpu: [arm64] 689 | os: [darwin] 690 | requiresBuild: true 691 | dev: true 692 | optional: true 693 | 694 | /esbuild-freebsd-64/0.14.40: 695 | resolution: {integrity: sha512-B9WZNUn7Y9f97xrQGBAQPKsebeFZzAd+JCdsLCexrVfTjB24b+/Iuq5O2z/q5Meg7Yz0S+j8AO6ncpvNkK2u0w==} 696 | engines: {node: '>=12'} 697 | cpu: [x64] 698 | os: [freebsd] 699 | requiresBuild: true 700 | dev: true 701 | optional: true 702 | 703 | /esbuild-freebsd-arm64/0.14.40: 704 | resolution: {integrity: sha512-3aB9uJv2/lmQNzwmieNyyOdxKi+3ERwrqf3snBu/oEng8b7nMBNrEN+p7jjkTYNYmo291KiH/5EIAXwpsZndFw==} 705 | engines: {node: '>=12'} 706 | cpu: [arm64] 707 | os: [freebsd] 708 | requiresBuild: true 709 | dev: true 710 | optional: true 711 | 712 | /esbuild-linux-32/0.14.40: 713 | resolution: {integrity: sha512-LMI9BMeuGf6NRS23LbyVarN3nf+JyNcfiVEnR9M8691kL5Ffp3e7oTYRH65XdTUirM9D6e5cppfWLjvrRbGnRw==} 714 | engines: {node: '>=12'} 715 | cpu: [ia32] 716 | os: [linux] 717 | requiresBuild: true 718 | dev: true 719 | optional: true 720 | 721 | /esbuild-linux-64/0.14.40: 722 | resolution: {integrity: sha512-D/NkZ9QR2KShJXNuRWANxJzPCrwJoAoWVetQiGIAepzXbNh+dBo5ZLmlh8Txs6tE600N67MF/ScHP1S4FxLaJg==} 723 | engines: {node: '>=12'} 724 | cpu: [x64] 725 | os: [linux] 726 | requiresBuild: true 727 | dev: true 728 | optional: true 729 | 730 | /esbuild-linux-arm/0.14.40: 731 | resolution: {integrity: sha512-2a0yZXbzr/s3iCgZ84jFTHf+NyyXQ/7/Sd28oQq5iyy7TbJNS973XUOwgdlHdRqBxvw0nIWTw2FuwyUJAFa6Qg==} 732 | engines: {node: '>=12'} 733 | cpu: [arm] 734 | os: [linux] 735 | requiresBuild: true 736 | dev: true 737 | optional: true 738 | 739 | /esbuild-linux-arm64/0.14.40: 740 | resolution: {integrity: sha512-TIoZWKjrMJxZujh2nSsrrLkLDLzD/oBpSiobdUGe2bqKZpT4m7fkR0tEDNyM6Xvzj9uTQ4iTfJr2ekmpg3DyTQ==} 741 | engines: {node: '>=12'} 742 | cpu: [arm64] 743 | os: [linux] 744 | requiresBuild: true 745 | dev: true 746 | optional: true 747 | 748 | /esbuild-linux-mips64le/0.14.40: 749 | resolution: {integrity: sha512-SP30CYYSDMwr6mPUbjvD4K2R03GQHIQGrkrbXt5NM6mFqzR+S+JKVv9juq/CjlM9V7iIPPPqe4mb4DWC3b8pBw==} 750 | engines: {node: '>=12'} 751 | cpu: [mips64el] 752 | os: [linux] 753 | requiresBuild: true 754 | dev: true 755 | optional: true 756 | 757 | /esbuild-linux-ppc64le/0.14.40: 758 | resolution: {integrity: sha512-HlU3dfIdwzm/zhbXvMa5yWIafBeI7v6BDaEuApAww5Av8ht7lXgD1fZ11iJVPjRWNLcCZUgZaJKFrosSPQO/Bw==} 759 | engines: {node: '>=12'} 760 | cpu: [ppc64] 761 | os: [linux] 762 | requiresBuild: true 763 | dev: true 764 | optional: true 765 | 766 | /esbuild-linux-riscv64/0.14.40: 767 | resolution: {integrity: sha512-4ImTBEUykhIcIq3c97dIXnsmAHb//cjHh4nxttLhwpTZ+b/KdM1IpttqFhB0AFLUsrjP4WOCMxAm5FOL7FC2uw==} 768 | engines: {node: '>=12'} 769 | cpu: [riscv64] 770 | os: [linux] 771 | requiresBuild: true 772 | dev: true 773 | optional: true 774 | 775 | /esbuild-linux-s390x/0.14.40: 776 | resolution: {integrity: sha512-kFCPKictYjpt5rt0bFdbSmb8AWut75sIh1fZUTCVkujWMcpdL8ADuYMfVrN7R0CSQvkF1nQtrIBfp+ZU7R7KNQ==} 777 | engines: {node: '>=12'} 778 | cpu: [s390x] 779 | os: [linux] 780 | requiresBuild: true 781 | dev: true 782 | optional: true 783 | 784 | /esbuild-netbsd-64/0.14.40: 785 | resolution: {integrity: sha512-Hwzw2cSI6+p03TUjugzec54W6uW4tA1J/WovmlHl96Icjy73eWnAyCQwgG6ZLirXpt2aDfTEVShNaC2fE4KVhQ==} 786 | engines: {node: '>=12'} 787 | cpu: [x64] 788 | os: [netbsd] 789 | requiresBuild: true 790 | dev: true 791 | optional: true 792 | 793 | /esbuild-openbsd-64/0.14.40: 794 | resolution: {integrity: sha512-L4Pix+N2Sb0HvLl8zyn1Aq2aYD5Jt8rk9zwW3NUx19yafJqAFsnUN7L/XbbWSv5/XMqnY4hpAvIP2pyeV9+Bjw==} 795 | engines: {node: '>=12'} 796 | cpu: [x64] 797 | os: [openbsd] 798 | requiresBuild: true 799 | dev: true 800 | optional: true 801 | 802 | /esbuild-sunos-64/0.14.40: 803 | resolution: {integrity: sha512-iEITaelmmCO43ewk0bOYRGrewu2i2h2V0gKHQ/rz1MRqif8ohY/FNLn4WnThGUlrEgA1nTL1tc57PL12QbOo2Q==} 804 | engines: {node: '>=12'} 805 | cpu: [x64] 806 | os: [sunos] 807 | requiresBuild: true 808 | dev: true 809 | optional: true 810 | 811 | /esbuild-windows-32/0.14.40: 812 | resolution: {integrity: sha512-uXHmKl4RtCkK1v6QQK4hsP8Xiku6CwUM/W7Yv2rGtfylSOrrWKcpqwlDWx6bIm1Hav1uBC8hbgJ1hY6pWFNhNA==} 813 | engines: {node: '>=12'} 814 | cpu: [ia32] 815 | os: [win32] 816 | requiresBuild: true 817 | dev: true 818 | optional: true 819 | 820 | /esbuild-windows-64/0.14.40: 821 | resolution: {integrity: sha512-dvgQLVYnJzqce97AeHvxWtV9lHRDxIPatOikmrh1vt/SCE4tyVo5nAT/2SiZBJ6DzYmZT3BcJTV24bBLyu4ZUA==} 822 | engines: {node: '>=12'} 823 | cpu: [x64] 824 | os: [win32] 825 | requiresBuild: true 826 | dev: true 827 | optional: true 828 | 829 | /esbuild-windows-arm64/0.14.40: 830 | resolution: {integrity: sha512-c8ohQSFtRq78pZ/LQcpMft2xuR2IEitQkW07f9K7iN4EBdJMrCpOoXrZCfmX9lAC8yYOU7xHoLFYVln3n6fK1Q==} 831 | engines: {node: '>=12'} 832 | cpu: [arm64] 833 | os: [win32] 834 | requiresBuild: true 835 | dev: true 836 | optional: true 837 | 838 | /esbuild/0.14.40: 839 | resolution: {integrity: sha512-toIoQk3ODEEIudsN74wXGdw1eiUN4aKRijOqiwEAqfUFlhORPYFJtACzRdRRlpUysRUUlvIUoGE1aw/MIVCWnA==} 840 | engines: {node: '>=12'} 841 | hasBin: true 842 | requiresBuild: true 843 | optionalDependencies: 844 | esbuild-android-64: 0.14.40 845 | esbuild-android-arm64: 0.14.40 846 | esbuild-darwin-64: 0.14.40 847 | esbuild-darwin-arm64: 0.14.40 848 | esbuild-freebsd-64: 0.14.40 849 | esbuild-freebsd-arm64: 0.14.40 850 | esbuild-linux-32: 0.14.40 851 | esbuild-linux-64: 0.14.40 852 | esbuild-linux-arm: 0.14.40 853 | esbuild-linux-arm64: 0.14.40 854 | esbuild-linux-mips64le: 0.14.40 855 | esbuild-linux-ppc64le: 0.14.40 856 | esbuild-linux-riscv64: 0.14.40 857 | esbuild-linux-s390x: 0.14.40 858 | esbuild-netbsd-64: 0.14.40 859 | esbuild-openbsd-64: 0.14.40 860 | esbuild-sunos-64: 0.14.40 861 | esbuild-windows-32: 0.14.40 862 | esbuild-windows-64: 0.14.40 863 | esbuild-windows-arm64: 0.14.40 864 | dev: true 865 | 866 | /escape-string-regexp/4.0.0: 867 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 868 | engines: {node: '>=10'} 869 | dev: true 870 | 871 | /eslint-config-prettier/8.5.0_eslint@8.16.0: 872 | resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} 873 | hasBin: true 874 | peerDependencies: 875 | eslint: '>=7.0.0' 876 | dependencies: 877 | eslint: 8.16.0 878 | dev: true 879 | 880 | /eslint-plugin-prettier/4.0.0_4fe3201cd09a8826bbd8050f2348cb2f: 881 | resolution: {integrity: sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==} 882 | engines: {node: '>=6.0.0'} 883 | peerDependencies: 884 | eslint: '>=7.28.0' 885 | eslint-config-prettier: '*' 886 | prettier: '>=2.0.0' 887 | peerDependenciesMeta: 888 | eslint-config-prettier: 889 | optional: true 890 | dependencies: 891 | eslint: 8.16.0 892 | eslint-config-prettier: 8.5.0_eslint@8.16.0 893 | prettier: 2.6.2 894 | prettier-linter-helpers: 1.0.0 895 | dev: true 896 | 897 | /eslint-plugin-vue/8.7.1_eslint@8.16.0: 898 | resolution: {integrity: sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg==} 899 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 900 | peerDependencies: 901 | eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 902 | dependencies: 903 | eslint: 8.16.0 904 | eslint-utils: 3.0.0_eslint@8.16.0 905 | natural-compare: 1.4.0 906 | nth-check: 2.1.1 907 | postcss-selector-parser: 6.0.10 908 | semver: 7.3.7 909 | vue-eslint-parser: 8.3.0_eslint@8.16.0 910 | transitivePeerDependencies: 911 | - supports-color 912 | dev: true 913 | 914 | /eslint-scope/5.1.1: 915 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 916 | engines: {node: '>=8.0.0'} 917 | dependencies: 918 | esrecurse: 4.3.0 919 | estraverse: 4.3.0 920 | dev: true 921 | 922 | /eslint-scope/7.1.1: 923 | resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} 924 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 925 | dependencies: 926 | esrecurse: 4.3.0 927 | estraverse: 5.3.0 928 | dev: true 929 | 930 | /eslint-utils/3.0.0_eslint@8.16.0: 931 | resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} 932 | engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} 933 | peerDependencies: 934 | eslint: '>=5' 935 | dependencies: 936 | eslint: 8.16.0 937 | eslint-visitor-keys: 2.1.0 938 | dev: true 939 | 940 | /eslint-visitor-keys/2.1.0: 941 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} 942 | engines: {node: '>=10'} 943 | dev: true 944 | 945 | /eslint-visitor-keys/3.3.0: 946 | resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} 947 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 948 | dev: true 949 | 950 | /eslint/8.16.0: 951 | resolution: {integrity: sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA==} 952 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 953 | hasBin: true 954 | dependencies: 955 | '@eslint/eslintrc': 1.3.0 956 | '@humanwhocodes/config-array': 0.9.5 957 | ajv: 6.12.6 958 | chalk: 4.1.2 959 | cross-spawn: 7.0.3 960 | debug: 4.3.4 961 | doctrine: 3.0.0 962 | escape-string-regexp: 4.0.0 963 | eslint-scope: 7.1.1 964 | eslint-utils: 3.0.0_eslint@8.16.0 965 | eslint-visitor-keys: 3.3.0 966 | espree: 9.3.2 967 | esquery: 1.4.0 968 | esutils: 2.0.3 969 | fast-deep-equal: 3.1.3 970 | file-entry-cache: 6.0.1 971 | functional-red-black-tree: 1.0.1 972 | glob-parent: 6.0.2 973 | globals: 13.15.0 974 | ignore: 5.2.0 975 | import-fresh: 3.3.0 976 | imurmurhash: 0.1.4 977 | is-glob: 4.0.3 978 | js-yaml: 4.1.0 979 | json-stable-stringify-without-jsonify: 1.0.1 980 | levn: 0.4.1 981 | lodash.merge: 4.6.2 982 | minimatch: 3.1.2 983 | natural-compare: 1.4.0 984 | optionator: 0.9.1 985 | regexpp: 3.2.0 986 | strip-ansi: 6.0.1 987 | strip-json-comments: 3.1.1 988 | text-table: 0.2.0 989 | v8-compile-cache: 2.3.0 990 | transitivePeerDependencies: 991 | - supports-color 992 | dev: true 993 | 994 | /espree/9.3.2: 995 | resolution: {integrity: sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==} 996 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 997 | dependencies: 998 | acorn: 8.7.1 999 | acorn-jsx: 5.3.2_acorn@8.7.1 1000 | eslint-visitor-keys: 3.3.0 1001 | dev: true 1002 | 1003 | /esprima/4.0.1: 1004 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1005 | engines: {node: '>=4'} 1006 | hasBin: true 1007 | dev: true 1008 | 1009 | /esquery/1.4.0: 1010 | resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} 1011 | engines: {node: '>=0.10'} 1012 | dependencies: 1013 | estraverse: 5.3.0 1014 | dev: true 1015 | 1016 | /esrecurse/4.3.0: 1017 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1018 | engines: {node: '>=4.0'} 1019 | dependencies: 1020 | estraverse: 5.3.0 1021 | dev: true 1022 | 1023 | /estraverse/4.3.0: 1024 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1025 | engines: {node: '>=4.0'} 1026 | dev: true 1027 | 1028 | /estraverse/5.3.0: 1029 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1030 | engines: {node: '>=4.0'} 1031 | dev: true 1032 | 1033 | /estree-walker/2.0.2: 1034 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 1035 | 1036 | /esutils/2.0.3: 1037 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1038 | engines: {node: '>=0.10.0'} 1039 | dev: true 1040 | 1041 | /fast-deep-equal/3.1.3: 1042 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1043 | dev: true 1044 | 1045 | /fast-diff/1.2.0: 1046 | resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} 1047 | dev: true 1048 | 1049 | /fast-glob/3.2.11: 1050 | resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} 1051 | engines: {node: '>=8.6.0'} 1052 | dependencies: 1053 | '@nodelib/fs.stat': 2.0.5 1054 | '@nodelib/fs.walk': 1.2.8 1055 | glob-parent: 5.1.2 1056 | merge2: 1.4.1 1057 | micromatch: 4.0.5 1058 | dev: true 1059 | 1060 | /fast-json-stable-stringify/2.1.0: 1061 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1062 | dev: true 1063 | 1064 | /fast-levenshtein/2.0.6: 1065 | resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} 1066 | dev: true 1067 | 1068 | /fastq/1.13.0: 1069 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} 1070 | dependencies: 1071 | reusify: 1.0.4 1072 | dev: true 1073 | 1074 | /file-entry-cache/6.0.1: 1075 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1076 | engines: {node: ^10.12.0 || >=12.0.0} 1077 | dependencies: 1078 | flat-cache: 3.0.4 1079 | dev: true 1080 | 1081 | /fill-range/7.0.1: 1082 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1083 | engines: {node: '>=8'} 1084 | dependencies: 1085 | to-regex-range: 5.0.1 1086 | dev: true 1087 | 1088 | /flat-cache/3.0.4: 1089 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 1090 | engines: {node: ^10.12.0 || >=12.0.0} 1091 | dependencies: 1092 | flatted: 3.2.5 1093 | rimraf: 3.0.2 1094 | dev: true 1095 | 1096 | /flatted/3.2.5: 1097 | resolution: {integrity: sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==} 1098 | dev: true 1099 | 1100 | /front-matter/4.0.2: 1101 | resolution: {integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==} 1102 | dependencies: 1103 | js-yaml: 3.14.1 1104 | dev: true 1105 | 1106 | /fs.realpath/1.0.0: 1107 | resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} 1108 | dev: true 1109 | 1110 | /fsevents/2.3.2: 1111 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1112 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1113 | os: [darwin] 1114 | requiresBuild: true 1115 | dev: true 1116 | optional: true 1117 | 1118 | /function-bind/1.1.1: 1119 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1120 | dev: true 1121 | 1122 | /functional-red-black-tree/1.0.1: 1123 | resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} 1124 | dev: true 1125 | 1126 | /glob-parent/5.1.2: 1127 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1128 | engines: {node: '>= 6'} 1129 | dependencies: 1130 | is-glob: 4.0.3 1131 | dev: true 1132 | 1133 | /glob-parent/6.0.2: 1134 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1135 | engines: {node: '>=10.13.0'} 1136 | dependencies: 1137 | is-glob: 4.0.3 1138 | dev: true 1139 | 1140 | /glob/7.2.3: 1141 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1142 | dependencies: 1143 | fs.realpath: 1.0.0 1144 | inflight: 1.0.6 1145 | inherits: 2.0.4 1146 | minimatch: 3.1.2 1147 | once: 1.4.0 1148 | path-is-absolute: 1.0.1 1149 | dev: true 1150 | 1151 | /globals/13.15.0: 1152 | resolution: {integrity: sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==} 1153 | engines: {node: '>=8'} 1154 | dependencies: 1155 | type-fest: 0.20.2 1156 | dev: true 1157 | 1158 | /globby/11.1.0: 1159 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1160 | engines: {node: '>=10'} 1161 | dependencies: 1162 | array-union: 2.1.0 1163 | dir-glob: 3.0.1 1164 | fast-glob: 3.2.11 1165 | ignore: 5.2.0 1166 | merge2: 1.4.1 1167 | slash: 3.0.0 1168 | dev: true 1169 | 1170 | /has-flag/4.0.0: 1171 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1172 | engines: {node: '>=8'} 1173 | dev: true 1174 | 1175 | /has/1.0.3: 1176 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1177 | engines: {node: '>= 0.4.0'} 1178 | dependencies: 1179 | function-bind: 1.1.1 1180 | dev: true 1181 | 1182 | /highlight.js/11.5.1: 1183 | resolution: {integrity: sha512-LKzHqnxr4CrD2YsNoIf/o5nJ09j4yi/GcH5BnYz9UnVpZdS4ucMgvP61TDty5xJcFGRjnH4DpujkS9bHT3hq0Q==} 1184 | engines: {node: '>=12.0.0'} 1185 | dev: false 1186 | 1187 | /htmlparser2/6.1.0: 1188 | resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} 1189 | dependencies: 1190 | domelementtype: 2.3.0 1191 | domhandler: 4.3.1 1192 | domutils: 2.8.0 1193 | entities: 2.2.0 1194 | dev: true 1195 | 1196 | /ignore/5.2.0: 1197 | resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} 1198 | engines: {node: '>= 4'} 1199 | dev: true 1200 | 1201 | /immutable/4.1.0: 1202 | resolution: {integrity: sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==} 1203 | dev: true 1204 | 1205 | /import-fresh/3.3.0: 1206 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1207 | engines: {node: '>=6'} 1208 | dependencies: 1209 | parent-module: 1.0.1 1210 | resolve-from: 4.0.0 1211 | dev: true 1212 | 1213 | /imurmurhash/0.1.4: 1214 | resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} 1215 | engines: {node: '>=0.8.19'} 1216 | dev: true 1217 | 1218 | /inflight/1.0.6: 1219 | resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} 1220 | dependencies: 1221 | once: 1.4.0 1222 | wrappy: 1.0.2 1223 | dev: true 1224 | 1225 | /inherits/2.0.4: 1226 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1227 | dev: true 1228 | 1229 | /is-binary-path/2.1.0: 1230 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1231 | engines: {node: '>=8'} 1232 | dependencies: 1233 | binary-extensions: 2.2.0 1234 | dev: true 1235 | 1236 | /is-core-module/2.9.0: 1237 | resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} 1238 | dependencies: 1239 | has: 1.0.3 1240 | dev: true 1241 | 1242 | /is-extglob/2.1.1: 1243 | resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} 1244 | engines: {node: '>=0.10.0'} 1245 | dev: true 1246 | 1247 | /is-glob/4.0.3: 1248 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1249 | engines: {node: '>=0.10.0'} 1250 | dependencies: 1251 | is-extglob: 2.1.1 1252 | dev: true 1253 | 1254 | /is-number/7.0.0: 1255 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1256 | engines: {node: '>=0.12.0'} 1257 | dev: true 1258 | 1259 | /isexe/2.0.0: 1260 | resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} 1261 | dev: true 1262 | 1263 | /js-yaml/3.14.1: 1264 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1265 | hasBin: true 1266 | dependencies: 1267 | argparse: 1.0.10 1268 | esprima: 4.0.1 1269 | dev: true 1270 | 1271 | /js-yaml/4.1.0: 1272 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1273 | hasBin: true 1274 | dependencies: 1275 | argparse: 2.0.1 1276 | dev: true 1277 | 1278 | /json-schema-traverse/0.4.1: 1279 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1280 | dev: true 1281 | 1282 | /json-stable-stringify-without-jsonify/1.0.1: 1283 | resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=} 1284 | dev: true 1285 | 1286 | /levn/0.4.1: 1287 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1288 | engines: {node: '>= 0.8.0'} 1289 | dependencies: 1290 | prelude-ls: 1.2.1 1291 | type-check: 0.4.0 1292 | dev: true 1293 | 1294 | /linkify-it/3.0.3: 1295 | resolution: {integrity: sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==} 1296 | dependencies: 1297 | uc.micro: 1.0.6 1298 | dev: true 1299 | 1300 | /linkify-it/4.0.1: 1301 | resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} 1302 | dependencies: 1303 | uc.micro: 1.0.6 1304 | dev: false 1305 | 1306 | /lodash.merge/4.6.2: 1307 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1308 | dev: true 1309 | 1310 | /lodash/4.17.21: 1311 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1312 | dev: true 1313 | 1314 | /lru-cache/6.0.0: 1315 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1316 | engines: {node: '>=10'} 1317 | dependencies: 1318 | yallist: 4.0.0 1319 | dev: true 1320 | 1321 | /magic-string/0.25.9: 1322 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} 1323 | dependencies: 1324 | sourcemap-codec: 1.4.8 1325 | 1326 | /markdown-it-highlightjs/4.0.1: 1327 | resolution: {integrity: sha512-EPXwFEN6P5nqR3G4KjT20r20xbGYKMMA/360hhSYFmeoGXTE6hsLtJAiB/8ID8slVH4CWHHEL7GX0YenyIstVQ==} 1328 | dependencies: 1329 | highlight.js: 11.5.1 1330 | dev: false 1331 | 1332 | /markdown-it-link-attributes/4.0.0: 1333 | resolution: {integrity: sha512-ssjxSLlLfQBkX6BvAx1rCPrx7ZoK91llQQvS3P7KXvlbnVD34OUkfXwWecN7su/7mrI/HOW0RI5szdJOIqYC3w==} 1334 | dev: false 1335 | 1336 | /markdown-it/12.3.2: 1337 | resolution: {integrity: sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==} 1338 | hasBin: true 1339 | dependencies: 1340 | argparse: 2.0.1 1341 | entities: 2.1.0 1342 | linkify-it: 3.0.3 1343 | mdurl: 1.0.1 1344 | uc.micro: 1.0.6 1345 | dev: true 1346 | 1347 | /markdown-it/13.0.1: 1348 | resolution: {integrity: sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==} 1349 | hasBin: true 1350 | dependencies: 1351 | argparse: 2.0.1 1352 | entities: 3.0.1 1353 | linkify-it: 4.0.1 1354 | mdurl: 1.0.1 1355 | uc.micro: 1.0.6 1356 | dev: false 1357 | 1358 | /mdurl/1.0.1: 1359 | resolution: {integrity: sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=} 1360 | 1361 | /merge2/1.4.1: 1362 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1363 | engines: {node: '>= 8'} 1364 | dev: true 1365 | 1366 | /micromatch/4.0.5: 1367 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1368 | engines: {node: '>=8.6'} 1369 | dependencies: 1370 | braces: 3.0.2 1371 | picomatch: 2.3.1 1372 | dev: true 1373 | 1374 | /minimatch/3.1.2: 1375 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1376 | dependencies: 1377 | brace-expansion: 1.1.11 1378 | dev: true 1379 | 1380 | /ms/2.1.2: 1381 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1382 | dev: true 1383 | 1384 | /nanoid/3.3.4: 1385 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} 1386 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1387 | hasBin: true 1388 | 1389 | /natural-compare/1.4.0: 1390 | resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} 1391 | dev: true 1392 | 1393 | /normalize-path/3.0.0: 1394 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1395 | engines: {node: '>=0.10.0'} 1396 | dev: true 1397 | 1398 | /nth-check/2.1.1: 1399 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} 1400 | dependencies: 1401 | boolbase: 1.0.0 1402 | dev: true 1403 | 1404 | /once/1.4.0: 1405 | resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} 1406 | dependencies: 1407 | wrappy: 1.0.2 1408 | dev: true 1409 | 1410 | /optionator/0.9.1: 1411 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} 1412 | engines: {node: '>= 0.8.0'} 1413 | dependencies: 1414 | deep-is: 0.1.4 1415 | fast-levenshtein: 2.0.6 1416 | levn: 0.4.1 1417 | prelude-ls: 1.2.1 1418 | type-check: 0.4.0 1419 | word-wrap: 1.2.3 1420 | dev: true 1421 | 1422 | /parent-module/1.0.1: 1423 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1424 | engines: {node: '>=6'} 1425 | dependencies: 1426 | callsites: 3.1.0 1427 | dev: true 1428 | 1429 | /path-is-absolute/1.0.1: 1430 | resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} 1431 | engines: {node: '>=0.10.0'} 1432 | dev: true 1433 | 1434 | /path-key/3.1.1: 1435 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1436 | engines: {node: '>=8'} 1437 | dev: true 1438 | 1439 | /path-parse/1.0.7: 1440 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1441 | dev: true 1442 | 1443 | /path-type/4.0.0: 1444 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1445 | engines: {node: '>=8'} 1446 | dev: true 1447 | 1448 | /picocolors/1.0.0: 1449 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1450 | 1451 | /picomatch/2.3.1: 1452 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1453 | engines: {node: '>=8.6'} 1454 | dev: true 1455 | 1456 | /pinia/2.0.14_typescript@4.6.4+vue@3.2.36: 1457 | resolution: {integrity: sha512-0nPuZR4TetT/WcLN+feMSjWJku3SQU7dBbXC6uw+R6FLQJCsg+/0pzXyD82T1FmAYe0lsx+jnEDQ1BLgkRKlxA==} 1458 | peerDependencies: 1459 | '@vue/composition-api': ^1.4.0 1460 | typescript: '>=4.4.4' 1461 | vue: ^2.6.14 || ^3.2.0 1462 | peerDependenciesMeta: 1463 | '@vue/composition-api': 1464 | optional: true 1465 | typescript: 1466 | optional: true 1467 | dependencies: 1468 | '@vue/devtools-api': 6.1.4 1469 | typescript: 4.6.4 1470 | vue: 3.2.36 1471 | vue-demi: 0.12.5_vue@3.2.36 1472 | dev: false 1473 | 1474 | /postcss-selector-parser/6.0.10: 1475 | resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} 1476 | engines: {node: '>=4'} 1477 | dependencies: 1478 | cssesc: 3.0.0 1479 | util-deprecate: 1.0.2 1480 | dev: true 1481 | 1482 | /postcss/8.4.14: 1483 | resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} 1484 | engines: {node: ^10 || ^12 || >=14} 1485 | dependencies: 1486 | nanoid: 3.3.4 1487 | picocolors: 1.0.0 1488 | source-map-js: 1.0.2 1489 | 1490 | /prelude-ls/1.2.1: 1491 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1492 | engines: {node: '>= 0.8.0'} 1493 | dev: true 1494 | 1495 | /prettier-linter-helpers/1.0.0: 1496 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 1497 | engines: {node: '>=6.0.0'} 1498 | dependencies: 1499 | fast-diff: 1.2.0 1500 | dev: true 1501 | 1502 | /prettier/2.6.2: 1503 | resolution: {integrity: sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==} 1504 | engines: {node: '>=10.13.0'} 1505 | hasBin: true 1506 | dev: true 1507 | 1508 | /punycode/2.1.1: 1509 | resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} 1510 | engines: {node: '>=6'} 1511 | dev: true 1512 | 1513 | /queue-microtask/1.2.3: 1514 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1515 | dev: true 1516 | 1517 | /readdirp/3.6.0: 1518 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1519 | engines: {node: '>=8.10.0'} 1520 | dependencies: 1521 | picomatch: 2.3.1 1522 | dev: true 1523 | 1524 | /regexpp/3.2.0: 1525 | resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} 1526 | engines: {node: '>=8'} 1527 | dev: true 1528 | 1529 | /resolve-from/4.0.0: 1530 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1531 | engines: {node: '>=4'} 1532 | dev: true 1533 | 1534 | /resolve/1.22.0: 1535 | resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} 1536 | hasBin: true 1537 | dependencies: 1538 | is-core-module: 2.9.0 1539 | path-parse: 1.0.7 1540 | supports-preserve-symlinks-flag: 1.0.0 1541 | dev: true 1542 | 1543 | /reusify/1.0.4: 1544 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1545 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1546 | dev: true 1547 | 1548 | /rimraf/3.0.2: 1549 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1550 | hasBin: true 1551 | dependencies: 1552 | glob: 7.2.3 1553 | dev: true 1554 | 1555 | /rollup/2.74.1: 1556 | resolution: {integrity: sha512-K2zW7kV8Voua5eGkbnBtWYfMIhYhT9Pel2uhBk2WO5eMee161nPze/XRfvEQPFYz7KgrCCnmh2Wy0AMFLGGmMA==} 1557 | engines: {node: '>=10.0.0'} 1558 | hasBin: true 1559 | optionalDependencies: 1560 | fsevents: 2.3.2 1561 | dev: true 1562 | 1563 | /run-parallel/1.2.0: 1564 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1565 | dependencies: 1566 | queue-microtask: 1.2.3 1567 | dev: true 1568 | 1569 | /sass/1.52.1: 1570 | resolution: {integrity: sha512-fSzYTbr7z8oQnVJ3Acp9hV80dM1fkMN7mSD/25mpcct9F7FPBMOI8krEYALgU1aZoqGhQNhTPsuSmxjnIvAm4Q==} 1571 | engines: {node: '>=12.0.0'} 1572 | hasBin: true 1573 | dependencies: 1574 | chokidar: 3.5.3 1575 | immutable: 4.1.0 1576 | source-map-js: 1.0.2 1577 | dev: true 1578 | 1579 | /semver/7.3.7: 1580 | resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} 1581 | engines: {node: '>=10'} 1582 | hasBin: true 1583 | dependencies: 1584 | lru-cache: 6.0.0 1585 | dev: true 1586 | 1587 | /shebang-command/2.0.0: 1588 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1589 | engines: {node: '>=8'} 1590 | dependencies: 1591 | shebang-regex: 3.0.0 1592 | dev: true 1593 | 1594 | /shebang-regex/3.0.0: 1595 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1596 | engines: {node: '>=8'} 1597 | dev: true 1598 | 1599 | /slash/3.0.0: 1600 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1601 | engines: {node: '>=8'} 1602 | dev: true 1603 | 1604 | /source-map-js/1.0.2: 1605 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1606 | engines: {node: '>=0.10.0'} 1607 | 1608 | /source-map/0.6.1: 1609 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1610 | engines: {node: '>=0.10.0'} 1611 | 1612 | /sourcemap-codec/1.4.8: 1613 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 1614 | 1615 | /sprintf-js/1.0.3: 1616 | resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} 1617 | dev: true 1618 | 1619 | /strip-ansi/6.0.1: 1620 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1621 | engines: {node: '>=8'} 1622 | dependencies: 1623 | ansi-regex: 5.0.1 1624 | dev: true 1625 | 1626 | /strip-json-comments/3.1.1: 1627 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1628 | engines: {node: '>=8'} 1629 | dev: true 1630 | 1631 | /supports-color/7.2.0: 1632 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1633 | engines: {node: '>=8'} 1634 | dependencies: 1635 | has-flag: 4.0.0 1636 | dev: true 1637 | 1638 | /supports-preserve-symlinks-flag/1.0.0: 1639 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1640 | engines: {node: '>= 0.4'} 1641 | dev: true 1642 | 1643 | /text-table/0.2.0: 1644 | resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} 1645 | dev: true 1646 | 1647 | /to-regex-range/5.0.1: 1648 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1649 | engines: {node: '>=8.0'} 1650 | dependencies: 1651 | is-number: 7.0.0 1652 | dev: true 1653 | 1654 | /tslib/1.14.1: 1655 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 1656 | dev: true 1657 | 1658 | /tsutils/3.21.0_typescript@4.6.4: 1659 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 1660 | engines: {node: '>= 6'} 1661 | peerDependencies: 1662 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 1663 | dependencies: 1664 | tslib: 1.14.1 1665 | typescript: 4.6.4 1666 | dev: true 1667 | 1668 | /type-check/0.4.0: 1669 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1670 | engines: {node: '>= 0.8.0'} 1671 | dependencies: 1672 | prelude-ls: 1.2.1 1673 | dev: true 1674 | 1675 | /type-fest/0.20.2: 1676 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1677 | engines: {node: '>=10'} 1678 | dev: true 1679 | 1680 | /typescript/4.6.4: 1681 | resolution: {integrity: sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==} 1682 | engines: {node: '>=4.2.0'} 1683 | hasBin: true 1684 | dev: true 1685 | 1686 | /uc.micro/1.0.6: 1687 | resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} 1688 | 1689 | /uri-js/4.4.1: 1690 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1691 | dependencies: 1692 | punycode: 2.1.1 1693 | dev: true 1694 | 1695 | /util-deprecate/1.0.2: 1696 | resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} 1697 | dev: true 1698 | 1699 | /v8-compile-cache/2.3.0: 1700 | resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} 1701 | dev: true 1702 | 1703 | /vite-plugin-dynamic-import/0.9.6: 1704 | resolution: {integrity: sha512-FpgqaobDq/glVDKRAs3+Wt/PiVoVuEXHLrh0snHrvaQYSTPXiUkMTzB4eFQUIhcgsFBbkg4Jic1cV6gHr8b+qg==} 1705 | dependencies: 1706 | fast-glob: 3.2.11 1707 | vite-plugin-utils: 0.1.0 1708 | dev: true 1709 | 1710 | /vite-plugin-markdown/2.0.2_vite@2.9.9: 1711 | resolution: {integrity: sha512-vNEd/BGpWg4A4h7Pa9bnp80yfi4CARtlPpw7Lx5aDliDoaJUsb7dv/uElc1PqL3H1vcSNbYmbS7N9AiuGoI5Eg==} 1712 | peerDependencies: 1713 | vite: ^2.0.0 1714 | dependencies: 1715 | front-matter: 4.0.2 1716 | htmlparser2: 6.1.0 1717 | markdown-it: 12.3.2 1718 | vite: 2.9.9_sass@1.52.1 1719 | dev: true 1720 | 1721 | /vite-plugin-utils/0.1.0: 1722 | resolution: {integrity: sha512-zmW5venCPEZ5hRDmwhHdxHAcmTXYBF0MobZQQBGz92VkdHR9Mm3hf7dioPnA7ahHs32HdjI1Bpxisg5IhH4bvg==} 1723 | dependencies: 1724 | acorn-walk: 8.2.0 1725 | fast-glob: 3.2.11 1726 | dev: true 1727 | 1728 | /vite/2.9.9_sass@1.52.1: 1729 | resolution: {integrity: sha512-ffaam+NgHfbEmfw/Vuh6BHKKlI/XIAhxE5QSS7gFLIngxg171mg1P3a4LSRME0z2ZU1ScxoKzphkipcYwSD5Ew==} 1730 | engines: {node: '>=12.2.0'} 1731 | hasBin: true 1732 | peerDependencies: 1733 | less: '*' 1734 | sass: '*' 1735 | stylus: '*' 1736 | peerDependenciesMeta: 1737 | less: 1738 | optional: true 1739 | sass: 1740 | optional: true 1741 | stylus: 1742 | optional: true 1743 | dependencies: 1744 | esbuild: 0.14.40 1745 | postcss: 8.4.14 1746 | resolve: 1.22.0 1747 | rollup: 2.74.1 1748 | sass: 1.52.1 1749 | optionalDependencies: 1750 | fsevents: 2.3.2 1751 | dev: true 1752 | 1753 | /vue-demi/0.12.5_vue@3.2.36: 1754 | resolution: {integrity: sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==} 1755 | engines: {node: '>=12'} 1756 | hasBin: true 1757 | requiresBuild: true 1758 | peerDependencies: 1759 | '@vue/composition-api': ^1.0.0-rc.1 1760 | vue: ^3.0.0-0 || ^2.6.0 1761 | peerDependenciesMeta: 1762 | '@vue/composition-api': 1763 | optional: true 1764 | dependencies: 1765 | vue: 3.2.36 1766 | dev: false 1767 | 1768 | /vue-eslint-parser/8.3.0_eslint@8.16.0: 1769 | resolution: {integrity: sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==} 1770 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1771 | peerDependencies: 1772 | eslint: '>=6.0.0' 1773 | dependencies: 1774 | debug: 4.3.4 1775 | eslint: 8.16.0 1776 | eslint-scope: 7.1.1 1777 | eslint-visitor-keys: 3.3.0 1778 | espree: 9.3.2 1779 | esquery: 1.4.0 1780 | lodash: 4.17.21 1781 | semver: 7.3.7 1782 | transitivePeerDependencies: 1783 | - supports-color 1784 | dev: true 1785 | 1786 | /vue-router/4.0.15_vue@3.2.36: 1787 | resolution: {integrity: sha512-xa+pIN9ZqORdIW1MkN2+d9Ui2pCM1b/UMgwYUCZOiFYHAvz/slKKBDha8DLrh5aCG/RibtrpyhKjKOZ85tYyWg==} 1788 | peerDependencies: 1789 | vue: ^3.2.0 1790 | dependencies: 1791 | '@vue/devtools-api': 6.1.4 1792 | vue: 3.2.36 1793 | dev: false 1794 | 1795 | /vue-tsc/0.34.16_typescript@4.6.4: 1796 | resolution: {integrity: sha512-9tYBQIOyl3Tz8ZrlYUKtftu5m/wXHfxCalyjR22QzSaUJoBJmZeNOoVs/QEllc0z4ideEZxvvU+pBFdoY3O16A==} 1797 | hasBin: true 1798 | peerDependencies: 1799 | typescript: '*' 1800 | dependencies: 1801 | '@volar/vue-typescript': 0.34.16 1802 | typescript: 4.6.4 1803 | dev: true 1804 | 1805 | /vue/3.2.36: 1806 | resolution: {integrity: sha512-5yTXmrE6gW8IQgttzHW5bfBiFA6mx35ZXHjGLDmKYzW6MMmYvCwuKybANRepwkMYeXw2v1buGg3/lPICY5YlZw==} 1807 | dependencies: 1808 | '@vue/compiler-dom': 3.2.36 1809 | '@vue/compiler-sfc': 3.2.36 1810 | '@vue/runtime-dom': 3.2.36 1811 | '@vue/server-renderer': 3.2.36_vue@3.2.36 1812 | '@vue/shared': 3.2.36 1813 | dev: false 1814 | 1815 | /which/2.0.2: 1816 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1817 | engines: {node: '>= 8'} 1818 | hasBin: true 1819 | dependencies: 1820 | isexe: 2.0.0 1821 | dev: true 1822 | 1823 | /word-wrap/1.2.3: 1824 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} 1825 | engines: {node: '>=0.10.0'} 1826 | dev: true 1827 | 1828 | /wrappy/1.0.2: 1829 | resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} 1830 | dev: true 1831 | 1832 | /yallist/4.0.0: 1833 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1834 | dev: true 1835 | --------------------------------------------------------------------------------
21 | {{ output.text }} 22 |