├── .editorconfig ├── .gitignore ├── .prettierrc ├── LICENSE ├── README.md ├── README.zh-CN.md ├── package.json ├── packages ├── micro-app-vue │ ├── package.json │ ├── src │ │ └── index.tsx │ ├── tsconfig.json │ └── vite.config.ts ├── micro-app │ ├── README.md │ ├── package.json │ ├── src │ │ └── index.tsx │ └── tsconfig.json ├── micro-sub │ ├── README.md │ ├── package.json │ ├── src │ │ ├── defineMicroApp.ts │ │ └── index.ts │ └── tsconfig.json └── micro-vite-plugin │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── index.ts │ ├── package.json │ └── tsconfig.json ├── pnpm-lock.yaml └── pnpm-workspace.yaml /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | stats.html 4 | 5 | # dependencies 6 | node_modules 7 | 8 | # builds 9 | build 10 | .rpt2_cache 11 | dist 12 | 13 | # misc 14 | .DS_Store 15 | .env 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | 25 | # misc 26 | yarn-error.log 27 | 28 | /coverage 29 | .idea 30 | package-lock.json 31 | *bak 32 | .vscode 33 | 34 | # visual studio code 35 | .history 36 | *.log 37 | functions/* 38 | .temp/** 39 | /.vscode 40 | 41 | # screenshot 42 | screenshot 43 | .firebase 44 | .eslintcache 45 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true 3 | } 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 MinJie 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # micro-app 2 | 3 | [![NPM version][npm-image]][npm-url] 4 | [![Downloads][downloads-image]][downloads-url] 5 | [![Minified size][min-size-image]][bundlephobia-url] 6 | [![Gzip size][gzip-size-image]][bundlephobia-url] 7 | 8 | **English** | [中文](./README.zh-CN.md) 9 | 10 | **simplest**、**flexible** and **componentized** micro frontend solutions 11 | 12 | ## Setup 13 | 14 | ```bash 15 | pnpm i @micro-web/app 16 | ``` 17 | 18 | ## Usage 19 | 20 | ```tsx 21 | } 25 | forwardProps={{ history }} 26 | /> 27 | ``` 28 | 29 | or 30 | 31 | ```tsx 32 | } 36 | forwardProps={{ history }} 37 | /> 38 | ``` 39 | 40 | [npm-image]: https://img.shields.io/npm/v/@micro-web/app.svg?style=flat-square 41 | [npm-url]: https://npmjs.org/package/@micro-web/app 42 | [downloads-image]: http://img.shields.io/npm/dm/@micro-web/app.svg?style=flat-square 43 | [downloads-url]: https://npmjs.org/package/@micro-web/app 44 | [min-size-image]: https://badgen.net/bundlephobia/min/@micro-web/app?label=minified 45 | [gzip-size-image]: https://badgen.net/bundlephobia/minzip/@micro-web/app?label=gzip 46 | [bundlephobia-url]: https://bundlephobia.com/result?p=@micro-web/app 47 | -------------------------------------------------------------------------------- /README.zh-CN.md: -------------------------------------------------------------------------------- 1 | # micro-app 2 | 3 | [![NPM version][npm-image]][npm-url] 4 | [![Downloads][downloads-image]][downloads-url] 5 | [![Minified size][min-size-image]][bundlephobia-url] 6 | [![Gzip size][gzip-size-image]][bundlephobia-url] 7 | 8 | **中文** | [English](./README.md) 9 | 10 | 极致**简单**、**灵活**和**组件化**的微应用解决方案 11 | 12 | ## 安装 13 | 14 | ```bash 15 | pnpm i @micro-web/app 16 | ``` 17 | 18 | ## 使用 19 | 20 | ```tsx 21 | } 25 | forwardProps={{ history }} 26 | /> 27 | ``` 28 | 29 | 或者 30 | 31 | ```tsx 32 | } 36 | forwardProps={{ history }} 37 | /> 38 | ``` 39 | 40 | [npm-image]: https://img.shields.io/npm/v/@micro-web/app.svg?style=flat-square 41 | [npm-url]: https://npmjs.org/package/@micro-web/app 42 | [downloads-image]: http://img.shields.io/npm/dm/@micro-web/app.svg?style=flat-square 43 | [downloads-url]: https://npmjs.org/package/@micro-web/app 44 | [min-size-image]: https://badgen.net/bundlephobia/min/@micro-web/app?label=minified 45 | [gzip-size-image]: https://badgen.net/bundlephobia/minzip/@micro-web/app?label=gzip 46 | [bundlephobia-url]: https://bundlephobia.com/result?p=@micro-web/app 47 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.0.0", 3 | "private": true, 4 | "keywords": [ 5 | "micro", 6 | "micro app" 7 | ], 8 | "repository": { 9 | "type": "git", 10 | "url": "git+https://github.com/MinJieLiu/micro-app.git" 11 | }, 12 | "author": "MinJieLiu", 13 | "license": "MIT", 14 | "bugs": { 15 | "url": "https://github.com/MinJieLiu/micro-app/issues" 16 | }, 17 | "homepage": "https://github.com/MinJieLiu/micro-app#readme", 18 | "devDependencies": { 19 | "prettier": "^2.7.1", 20 | "typescript": "^4.8.3" 21 | }, 22 | "pnpm": { 23 | "peerDependencyRules": { 24 | "ignoreMissing": [ 25 | "typescript" 26 | ] 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /packages/micro-app-vue/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@micro-web/app-vue", 3 | "version": "0.3.0", 4 | "description": "Extremely simple, flexible, transparent and component micro-application solution.", 5 | "type": "module", 6 | "module": "./dist/index.es.js", 7 | "types": "./dist/index.d.ts", 8 | "publishConfig": { 9 | "access": "public" 10 | }, 11 | "keywords": [ 12 | "micro", 13 | "micro app" 14 | ], 15 | "scripts": { 16 | "build": "vite build && vue-tsc --declaration --emitDeclarationOnly" 17 | }, 18 | "repository": { 19 | "type": "git", 20 | "url": "git+https://github.com/MinJieLiu/micro-app.git" 21 | }, 22 | "author": "MinJieLiu", 23 | "license": "MIT", 24 | "bugs": { 25 | "url": "https://github.com/MinJieLiu/micro-app/issues" 26 | }, 27 | "files": [ 28 | "src", 29 | "dist" 30 | ], 31 | "homepage": "https://github.com/MinJieLiu/micro-app#readme", 32 | "devDependencies": { 33 | "@types/node": "^18.7.18", 34 | "@vitejs/plugin-vue": "^3.1.0", 35 | "@vitejs/plugin-vue-jsx": "^2.0.1", 36 | "vite": "^3.1.3", 37 | "vue": "^3.2.39", 38 | "vue-tsc": "^0.40.13" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /packages/micro-app-vue/src/index.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | defineComponent, 3 | type PropType, 4 | type HTMLAttributes, 5 | type VNode, 6 | type CSSProperties, 7 | ref, 8 | type Ref, 9 | onBeforeUnmount, 10 | } from 'vue'; 11 | 12 | export type Entry = string | (() => Promise); 13 | 14 | export interface MicroAppProps extends HTMLAttributes { 15 | /** 16 | * 加载地址 17 | * @example //localhost:3002/src/main.tsx 18 | */ 19 | entry: Entry; 20 | /** 21 | * 加载中反馈 22 | */ 23 | fallback?: VNode; 24 | /** 25 | * 渲染错误信息 26 | */ 27 | renderError?: (message: string) => VNode; 28 | /** 29 | * className 30 | */ 31 | className?: string; 32 | /** 33 | * style 34 | */ 35 | style?: CSSProperties; 36 | /** 37 | * 传递给子应用的参数 38 | */ 39 | forwardProps?: Record; 40 | } 41 | 42 | export interface AppConfig { 43 | /** 44 | * 挂载 45 | */ 46 | mount?: (props: unknown) => void; 47 | /** 48 | * 更新 49 | */ 50 | render?: (props: unknown) => VNode; 51 | /** 52 | * 卸载 53 | */ 54 | unmount?: () => void; 55 | } 56 | 57 | export interface ResponseModule { 58 | default: (container: HTMLElement | null) => AppConfig; 59 | } 60 | 61 | export type ResponseFunc = ( 62 | container: HTMLElement | null 63 | ) => AppConfig; 64 | 65 | const DEBUG_MODE = false; 66 | 67 | export const MicroApp = defineComponent({ 68 | name: 'MicroApp', 69 | props: { 70 | items: { 71 | type: Object as PropType, 72 | required: true, 73 | }, 74 | }, 75 | setup(props) { 76 | if (DEBUG_MODE) { 77 | console.log('loading micro app, props is ', props); 78 | console.log('loading micro app, entry is ', props.items.entry); 79 | console.log( 80 | 'loading micro app, forwardProps is ', 81 | props.items.forwardProps 82 | ); 83 | } 84 | 85 | // 传递给子应用的节点 86 | const containerRef = ref(null); 87 | // 子应用配置 88 | const configRef = ref(); 89 | // 加载中 90 | const loading = ref(true); 91 | // 错误信息 92 | const errorMsg = ref(); 93 | 94 | handleLoadApp(props.items.entry) 95 | .then( 96 | (res) => 97 | resolveErrors(res, props.items.entry, containerRef), 98 | ) 99 | .then((config) => { 100 | if (config.mount) { 101 | loading.value = false; 102 | configRef.value = config; 103 | config.mount(props.items.forwardProps); 104 | return; 105 | } 106 | // render 模式处理 107 | configRef.value = config; 108 | loading.value = false; 109 | }) 110 | .catch((msg) => { 111 | console.error(msg); 112 | loading.value = false; 113 | errorMsg.value = 114 | typeof msg === 'string' 115 | ? msg 116 | : msg?.message || `Failed to load: ${props.items.entry}`; 117 | }); 118 | 119 | onBeforeUnmount(() => { 120 | const config = configRef.value; 121 | if (config?.unmount) { 122 | config.unmount(); 123 | } 124 | }); 125 | 126 | const config = configRef.value; 127 | return () => ( 128 |
129 | {errorMsg.value 130 | ? props.items.renderError 131 | ? props.items.renderError(errorMsg.value) 132 | : errorMsg.value 133 | : loading.value && props.items.fallback 134 | ? props.items.fallback 135 | : config?.render?.(props.items.forwardProps)} 136 |
137 | ); 138 | }, 139 | }); 140 | 141 | function handleLoadApp(entry: Entry): Promise { 142 | if (typeof entry === 'function') { 143 | return entry() as Promise; 144 | } 145 | const source = `${entry}?microAppEnv&t=${Date.now()}`; 146 | return import(/* @vite-ignore */ source); 147 | } 148 | 149 | function resolveErrors( 150 | res: ResponseModule, 151 | entry: Entry, 152 | containerRef: Ref 153 | ) { 154 | if (DEBUG_MODE) { 155 | console.log('app module is :', res); 156 | } 157 | 158 | if (typeof res.default !== 'function') { 159 | return Promise.reject(new Error(`[MicroApp] - 导出格式不正确: ${entry}`)); 160 | } 161 | const config = (res.default(containerRef.value)) as AppConfig; 162 | if (DEBUG_MODE) { 163 | console.log('config :', config); 164 | } 165 | if (!(config.mount || config.render)) { 166 | return Promise.reject( 167 | new Error(`[MicroApp] - 导出方法缺失 'mount' 或 'render': ${entry}`) 168 | ); 169 | } 170 | if (config.mount && !config.unmount) { 171 | return Promise.reject( 172 | new Error(`[MicroApp] - 导出方法缺失 'unmount': ${entry}`) 173 | ); 174 | } 175 | return config; 176 | } 177 | -------------------------------------------------------------------------------- /packages/micro-app-vue/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "dist", 4 | "baseUrl": "./", 5 | "target": "esnext", 6 | "useDefineForClassFields": true, 7 | "module": "esnext", 8 | "moduleResolution": "node", 9 | "isolatedModules": true, 10 | "strict": true, 11 | "jsx": "preserve", 12 | "sourceMap": true, 13 | "resolveJsonModule": true, 14 | "esModuleInterop": true, 15 | "lib": ["esnext", "dom", "dom.iterable"], 16 | "skipLibCheck": true, 17 | "typeRoots": ["./node_modules/@types/"], 18 | "types": ["vite/client"] 19 | }, 20 | "include": [ "src/index.tsx"] 21 | } 22 | -------------------------------------------------------------------------------- /packages/micro-app-vue/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import vue from '@vitejs/plugin-vue'; 3 | import vueJsx from '@vitejs/plugin-vue-jsx'; 4 | import { resolve } from 'path'; 5 | 6 | export default defineConfig({ 7 | plugins: [vue(),vueJsx() ], 8 | build: { 9 | outDir: './dist', 10 | lib: { 11 | entry: resolve(__dirname, 'src/index.tsx'), 12 | formats:['es'], 13 | fileName: (format) => `index.${format}.js`, 14 | }, 15 | rollupOptions: { 16 | external: ['vue'] 17 | } 18 | } 19 | }); 20 | -------------------------------------------------------------------------------- /packages/micro-app/README.md: -------------------------------------------------------------------------------- 1 | # micro-app 2 | 3 | [![NPM version][npm-image]][npm-url] 4 | [![Downloads][downloads-image]][downloads-url] 5 | [![Minified size][min-size-image]][bundlephobia-url] 6 | [![Gzip size][gzip-size-image]][bundlephobia-url] 7 | 8 | 极致**简单**、**灵活**、**灵活**和**组件化**的微应用解决方案 9 | 10 | ## 安装 11 | 12 | ```bash 13 | pnpm i @micro-web/app 14 | ``` 15 | 16 | ## 使用 17 | 18 | ```tsx 19 | } 23 | history={history} 24 | />; 25 | ``` 26 | 27 | [npm-image]: https://img.shields.io/npm/v/@micro-web/app.svg?style=flat-square 28 | [npm-url]: https://npmjs.org/package/@micro-web/app 29 | [downloads-image]: http://img.shields.io/npm/dm/@micro-web/app.svg?style=flat-square 30 | [downloads-url]: https://npmjs.org/package/@micro-web/app 31 | [min-size-image]: https://badgen.net/bundlephobia/min/@micro-web/app?label=minified 32 | [gzip-size-image]: https://badgen.net/bundlephobia/minzip/@micro-web/app?label=gzip 33 | [bundlephobia-url]: https://bundlephobia.com/result?p=@micro-web/app 34 | -------------------------------------------------------------------------------- /packages/micro-app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@micro-web/app", 3 | "version": "0.3.0", 4 | "description": "Extremely simple, flexible, transparent and component micro-application solution.", 5 | "type": "module", 6 | "module": "./dist/index.js", 7 | "types": "./dist/index.d.ts", 8 | "publishConfig": { 9 | "access": "public" 10 | }, 11 | "keywords": [ 12 | "micro", 13 | "micro app" 14 | ], 15 | "scripts": { 16 | "build": "tsc" 17 | }, 18 | "repository": { 19 | "type": "git", 20 | "url": "git+https://github.com/MinJieLiu/micro-app.git" 21 | }, 22 | "author": "MinJieLiu", 23 | "license": "MIT", 24 | "bugs": { 25 | "url": "https://github.com/MinJieLiu/micro-app/issues" 26 | }, 27 | "files": [ 28 | "src", 29 | "dist" 30 | ], 31 | "homepage": "https://github.com/MinJieLiu/micro-app#readme", 32 | "devDependencies": { 33 | "@types/react": "^18.0.20", 34 | "react": "^18.2.0" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /packages/micro-app/src/index.tsx: -------------------------------------------------------------------------------- 1 | import type { 2 | ReactNode, 3 | RefObject, 4 | CSSProperties, 5 | HTMLAttributes, 6 | } from 'react'; 7 | import React, { useEffect, useRef, useState } from 'react'; 8 | 9 | export type Entry = string | (() => Promise); 10 | 11 | export interface MicroAppProps extends HTMLAttributes { 12 | /** 13 | * 加载地址 14 | * @example //localhost:3002/src/main.tsx 15 | */ 16 | entry: Entry; 17 | /** 18 | * 加载中反馈 19 | */ 20 | fallback?: ReactNode; 21 | /** 22 | * 渲染错误信息 23 | */ 24 | renderError?: (message: string) => ReactNode; 25 | /** 26 | * className 27 | */ 28 | className?: string; 29 | /** 30 | * style 31 | */ 32 | style?: CSSProperties; 33 | /** 34 | * 传递给子应用的参数 35 | */ 36 | forwardProps?: Record; 37 | } 38 | 39 | /** 40 | * App 格式 41 | */ 42 | export interface AppConfig { 43 | /** 44 | * 挂载 45 | */ 46 | mount?: (props: unknown) => void; 47 | /** 48 | * 更新 49 | */ 50 | render?: (props: unknown) => ReactNode; 51 | /** 52 | * 卸载 53 | */ 54 | unmount?: () => void; 55 | } 56 | 57 | export interface ResponseModule { 58 | default: (container: HTMLElement | null) => AppConfig; 59 | } 60 | 61 | /** 62 | * 微应用加载组件 63 | */ 64 | export function MicroApp({ 65 | entry, 66 | fallback, 67 | renderError, 68 | className, 69 | style, 70 | forwardProps, 71 | ...props 72 | }: MicroAppProps) { 73 | // 传递给子应用的节点 74 | const containerRef = useRef(null); 75 | // 子应用配置 76 | const configRef = useRef(); 77 | // 加载中 78 | const [loading, setLoading] = useState(true); 79 | // 错误信息 80 | const [errorMsg, setErrorMsg] = useState(); 81 | 82 | useEffect(() => { 83 | handleLoadApp(entry) 84 | .then((res) => resolveErrors(res, entry, containerRef)) 85 | .then((config) => { 86 | if (config.mount) { 87 | setLoading(false); 88 | configRef.current = config; 89 | config.mount(forwardProps); 90 | return; 91 | } 92 | // render 模式处理 93 | configRef.current = config; 94 | setLoading(false); 95 | }) 96 | .catch((msg) => { 97 | console.error(msg); 98 | setLoading(false); 99 | setErrorMsg( 100 | typeof msg === 'string' 101 | ? msg 102 | : (msg && msg.message) || `Failed to load: ${entry}` 103 | ); 104 | }); 105 | return () => { 106 | const config = configRef.current; 107 | if (config && config.unmount) { 108 | config.unmount(); 109 | } 110 | }; 111 | }, []); 112 | const config = configRef.current; 113 | 114 | return ( 115 |
116 | {errorMsg 117 | ? renderError 118 | ? renderError(errorMsg) 119 | : errorMsg 120 | : loading && fallback 121 | ? fallback 122 | : config && config.render && config.render(forwardProps)} 123 |
124 | ); 125 | } 126 | 127 | function handleLoadApp(entry: Entry): Promise { 128 | if (typeof entry === 'function') { 129 | return entry() as Promise; 130 | } 131 | const source = `${entry}?microAppEnv&t=${Date.now()}`; 132 | return import(/* @vite-ignore */ source); 133 | } 134 | 135 | function resolveErrors( 136 | res: ResponseModule, 137 | entry: Entry, 138 | containerRef: RefObject 139 | ) { 140 | if (typeof res.default !== 'function') { 141 | return Promise.reject(`[MicroApp] - 导出格式不正确: ${entry}`); 142 | } 143 | const config = res.default(containerRef.current) as AppConfig; 144 | if (!(config.mount || config.render)) { 145 | return Promise.reject( 146 | `[MicroApp] - 导出方法缺失 'mount' 或 'render': ${entry}` 147 | ); 148 | } 149 | if (config.mount && !config.unmount) { 150 | return Promise.reject(`[MicroApp] - 导出方法缺失 'unmount': ${entry}`); 151 | } 152 | return config; 153 | } 154 | -------------------------------------------------------------------------------- /packages/micro-app/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "dist", 4 | "declaration": true, 5 | "target": "ESNext", 6 | "useDefineForClassFields": true, 7 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 8 | "allowJs": false, 9 | "skipLibCheck": false, 10 | "esModuleInterop": false, 11 | "allowSyntheticDefaultImports": true, 12 | "strict": true, 13 | "forceConsistentCasingInFileNames": true, 14 | "module": "ESNext", 15 | "moduleResolution": "Node", 16 | "resolveJsonModule": true, 17 | "isolatedModules": true, 18 | "jsx": "react" 19 | }, 20 | "include": ["./src"] 21 | } 22 | -------------------------------------------------------------------------------- /packages/micro-sub/README.md: -------------------------------------------------------------------------------- 1 | # @micro-web/sub 2 | 3 | [![NPM version][npm-image]][npm-url] 4 | [![Downloads][downloads-image]][downloads-url] 5 | [![Minified size][min-size-image]][bundlephobia-url] 6 | [![Gzip size][gzip-size-image]][bundlephobia-url] 7 | 8 | `@micro-web/app` 微应用解决方案 **子应用定义** 9 | 10 | ## 安装 11 | 12 | ```bash 13 | pnpm i @micro-web/sub 14 | ``` 15 | 16 | ## 使用 17 | 18 | ```tsx 19 | import { defineMicroApp } from '@micro-web/sub'; 20 | import App, { AppProps } from './App'; 21 | 22 | export default defineMicroApp((container) => { 23 | function render(props: AppProps) { 24 | ReactDOM.render(, container); 25 | } 26 | return { 27 | mount: render, 28 | render: render, 29 | unmount() { 30 | ReactDOM.unmountComponentAtNode(container); 31 | }, 32 | }; 33 | }); 34 | ``` 35 | 36 | ### `defineMicroApp` 37 | 38 | 需配合插件 ` @micro-web/vite-plugin`。其主要作用将 CSS 通过 `link` 标签插入到主应用的动态节点上。 39 | 40 | [npm-image]: https://img.shields.io/npm/v/@micro-web/sub.svg?style=flat-square 41 | [npm-url]: https://npmjs.org/package/@micro-web/sub 42 | [downloads-image]: http://img.shields.io/npm/dm/@micro-web/sub.svg?style=flat-square 43 | [downloads-url]: https://npmjs.org/package/@micro-web/sub 44 | [min-size-image]: https://badgen.net/bundlephobia/min/@micro-web/sub?label=minified 45 | [gzip-size-image]: https://badgen.net/bundlephobia/minzip/@micro-web/sub?label=gzip 46 | [bundlephobia-url]: https://bundlephobia.com/result?p=@micro-web/sub 47 | -------------------------------------------------------------------------------- /packages/micro-sub/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@micro-web/sub", 3 | "version": "0.2.3", 4 | "description": "@micro-web/app 微前端方案应用接入", 5 | "type": "module", 6 | "module": "./dist/index.js", 7 | "types": "./dist/index.d.ts", 8 | "publishConfig": { 9 | "access": "public" 10 | }, 11 | "keywords": [ 12 | "micro", 13 | "micro app", 14 | "micro vite", 15 | "vite plugin" 16 | ], 17 | "scripts": { 18 | "build": "tsc" 19 | }, 20 | "repository": { 21 | "type": "git", 22 | "url": "git+https://github.com/MinJieLiu/micro-app.git" 23 | }, 24 | "author": "MinJieLiu", 25 | "license": "MIT", 26 | "bugs": { 27 | "url": "https://github.com/MinJieLiu/micro-app/issues" 28 | }, 29 | "homepage": "https://github.com/MinJieLiu/micro-app#readme", 30 | "files": [ 31 | "src", 32 | "dist" 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /packages/micro-sub/src/defineMicroApp.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * App 格式 3 | */ 4 | export interface AppConfig

{ 5 | /** 6 | * 挂载 7 | */ 8 | mount?: (props: P) => void; 9 | /** 10 | * 更新 11 | */ 12 | render?: (props: P) => any; 13 | /** 14 | * 卸载 15 | */ 16 | unmount?: () => void; 17 | } 18 | 19 | type MicroCallback

= (container: HTMLElement) => AppConfig

; 20 | 21 | export interface DefineApp

extends MicroCallback

{ 22 | /** 23 | * 样式注入方法,配合 vite 插件 24 | */ 25 | styleInject?: (container: HTMLElement) => void; 26 | } 27 | 28 | /** 29 | * 定义 micro app,额外处理样式问题 30 | */ 31 | export function defineMicroApp

(callback: MicroCallback

) { 32 | const defineApp: DefineApp

= (container: HTMLElement) => { 33 | const appConfig = callback(container); 34 | 35 | // 处理样式局部插入 36 | const mountFn = appConfig.mount; 37 | const inject = defineApp.styleInject; 38 | if (mountFn && inject) { 39 | appConfig.mount = (props) => { 40 | mountFn(props); 41 | inject(container); 42 | }; 43 | } 44 | return appConfig; 45 | }; 46 | 47 | return defineApp; 48 | } 49 | -------------------------------------------------------------------------------- /packages/micro-sub/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './defineMicroApp'; 2 | -------------------------------------------------------------------------------- /packages/micro-sub/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "dist", 4 | "declaration": true, 5 | "target": "ESNext", 6 | "useDefineForClassFields": true, 7 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 8 | "allowJs": false, 9 | "skipLibCheck": true, 10 | "esModuleInterop": false, 11 | "allowSyntheticDefaultImports": true, 12 | "strict": true, 13 | "forceConsistentCasingInFileNames": true, 14 | "module": "ESNext", 15 | "moduleResolution": "Node", 16 | "resolveJsonModule": true, 17 | "isolatedModules": true, 18 | "jsx": "react" 19 | }, 20 | "include": ["./src"] 21 | } 22 | -------------------------------------------------------------------------------- /packages/micro-vite-plugin/.gitignore: -------------------------------------------------------------------------------- 1 | *.js 2 | *.d.ts 3 | -------------------------------------------------------------------------------- /packages/micro-vite-plugin/.npmignore: -------------------------------------------------------------------------------- 1 | # misc 2 | .DS_Store 3 | .env 4 | .env.local 5 | .env.development.local 6 | .env.test.local 7 | .env.production.local 8 | 9 | yarn.lock 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | 15 | /coverage 16 | .idea 17 | package-lock.json 18 | *bak 19 | .vscode 20 | 21 | # visual studio code 22 | .history 23 | *.log 24 | functions/* 25 | .temp/** 26 | /.vscode 27 | 28 | # screenshot 29 | screenshot 30 | .firebase 31 | .eslintcache 32 | 33 | stats.html 34 | .travis.yml 35 | -------------------------------------------------------------------------------- /packages/micro-vite-plugin/README.md: -------------------------------------------------------------------------------- 1 | # @micro-web/vite-plugin 2 | 3 | [![NPM version][npm-image]][npm-url] 4 | [![Downloads][downloads-image]][downloads-url] 5 | [![Minified size][min-size-image]][bundlephobia-url] 6 | [![Gzip size][gzip-size-image]][bundlephobia-url] 7 | 8 | `@micro-web/app` 微应用解决方案 **Vite 插件** 9 | 10 | ## 安装 11 | 12 | ```bash 13 | pnpm i @micro-web/vite-plugin 14 | ``` 15 | 16 | ## 特性 17 | 18 | - 创建极小的入口文件 `main.js`,配合 `hash` 和主应用时间戳缓存处理 19 | - 将 `CSS` 动态插入到 `` 创建的节点上 20 | - 预设微应用所需的 `Vite` 配置 21 | - 修正图片资源使用绝对地址 22 | 23 | ## 使用 24 | 25 | ```tsx 26 | import { microWebPlugin } from '@micro-web/vite-plugin'; 27 | 28 | export default defineConfig({ 29 | plugins: [react(), microWebPlugin()], 30 | }); 31 | ``` 32 | 33 | [npm-image]: https://img.shields.io/npm/v/@micro-web/vite-plugin.svg?style=flat-square 34 | [npm-url]: https://npmjs.org/package/@micro-web/vite-plugin 35 | [downloads-image]: http://img.shields.io/npm/dm/@micro-web/vite-plugin.svg?style=flat-square 36 | [downloads-url]: https://npmjs.org/package/@micro-web/vite-plugin 37 | [min-size-image]: https://badgen.net/bundlephobia/min/@micro-web/vite-plugin?label=minified 38 | [gzip-size-image]: https://badgen.net/bundlephobia/minzip/@micro-web/vite-plugin?label=gzip 39 | [bundlephobia-url]: https://bundlephobia.com/result?p=@micro-web/vite-plugin 40 | -------------------------------------------------------------------------------- /packages/micro-vite-plugin/index.ts: -------------------------------------------------------------------------------- 1 | import type { Plugin } from 'vite'; 2 | import { transformWithEsbuild } from 'vite'; 3 | 4 | const imagesRE = new RegExp(`\\.(png|webp|jpg|gif|jpeg|tiff|svg|bmp)($|\\?)`); 5 | 6 | export interface microWebPluginParams { 7 | styleAppendTo?: string; 8 | } 9 | 10 | /** 11 | * @micro-web/app 微前端方案插件 12 | */ 13 | export function microWebPlugin({ 14 | styleAppendTo = 'parentNode', 15 | }: microWebPluginParams): Plugin { 16 | return { 17 | name: 'micro-web-plugin', 18 | enforce: 'post', 19 | config() { 20 | return { 21 | build: { 22 | // es2020 支持 import.meta 语法 23 | target: 'es2020', 24 | // 打包为一个 CSS 文件,通过 main.js 自行插入,不自动插入到 header 中 25 | cssCodeSplit: false, 26 | rollupOptions: { 27 | // 用于控制 Rollup 尝试确保入口块与基础入口模块具有相同的导出 28 | preserveEntrySignatures: 'allow-extension', 29 | input: 'src/main.tsx', 30 | }, 31 | }, 32 | }; 33 | }, 34 | transform(code, id) { 35 | // 修正图片资源使用绝对地址 36 | if (imagesRE.test(id)) { 37 | return { 38 | code: code.replace( 39 | /(export\s+default)\s+(".+")/, 40 | `$1 new URL($2, import.meta['url']).href` 41 | ), 42 | map: null, 43 | }; 44 | } 45 | return undefined; 46 | }, 47 | async generateBundle(options, bundle) { 48 | let entry: string | undefined; 49 | const cssChunks: string[] = []; 50 | for (const chunkName of Object.keys(bundle)) { 51 | if (chunkName.includes('main') && chunkName.endsWith('.js')) { 52 | entry = chunkName; 53 | } 54 | if (chunkName.endsWith('.css')) { 55 | cssChunks.push(`./${chunkName}`); 56 | } 57 | } 58 | if (entry) { 59 | const cssChunksStr = JSON.stringify(cssChunks); 60 | 61 | // 修正 css 插入的位置 62 | const result = await transformWithEsbuild( 63 | ` 64 | import defineApp from './${entry}?microAppEnv'; 65 | 66 | function createLink(href) { 67 | const link = document.createElement('link'); 68 | link.rel = 'stylesheet'; 69 | link.href = href; 70 | link.id = href; 71 | return link; 72 | } 73 | 74 | const styles = ${cssChunksStr}.map(css => createLink(new URL(css, import.meta['url']))); 75 | 76 | defineApp.styleInject = (parentNode) => { 77 | styles.forEach((link) => { 78 | if (!document.getElementById(link.id)) { 79 | ${styleAppendTo}.append(link); 80 | } 81 | }); 82 | }; 83 | 84 | export default defineApp; 85 | `, 86 | 'main.js', 87 | { minify: true } 88 | ); 89 | 90 | // 导出微量体积入口文件,配合 hash 和主应用时间戳缓存处理 91 | this.emitFile({ 92 | fileName: 'main.js', 93 | type: 'asset', 94 | source: result.code, 95 | }); 96 | } 97 | }, 98 | }; 99 | } 100 | -------------------------------------------------------------------------------- /packages/micro-vite-plugin/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@micro-web/vite-plugin", 3 | "version": "0.3.0", 4 | "description": "@micro-web/app 微前端方案 Vite 插件", 5 | "main": "./index.js", 6 | "types": "./index.d.ts", 7 | "publishConfig": { 8 | "access": "public" 9 | }, 10 | "keywords": [ 11 | "micro", 12 | "micro app", 13 | "micro vite", 14 | "vite plugin" 15 | ], 16 | "scripts": { 17 | "build": "tsc" 18 | }, 19 | "repository": { 20 | "type": "git", 21 | "url": "git+https://github.com/MinJieLiu/micro-app.git" 22 | }, 23 | "author": "MinJieLiu", 24 | "license": "MIT", 25 | "bugs": { 26 | "url": "https://github.com/MinJieLiu/micro-app/issues" 27 | }, 28 | "homepage": "https://github.com/MinJieLiu/micro-app#readme", 29 | "devDependencies": { 30 | "vite": "^3.1.3" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /packages/micro-vite-plugin/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "target": "ESNext", 5 | "useDefineForClassFields": true, 6 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 7 | "allowJs": false, 8 | "skipLibCheck": true, 9 | "esModuleInterop": false, 10 | "allowSyntheticDefaultImports": true, 11 | "strict": true, 12 | "forceConsistentCasingInFileNames": true, 13 | "module": "CommonJS", 14 | "moduleResolution": "Node", 15 | "resolveJsonModule": true, 16 | "isolatedModules": true, 17 | "jsx": "react" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | importers: 4 | 5 | .: 6 | specifiers: 7 | prettier: ^2.7.1 8 | typescript: ^4.8.3 9 | devDependencies: 10 | prettier: 2.7.1 11 | typescript: 4.8.3 12 | 13 | packages/micro-app: 14 | specifiers: 15 | '@types/react': ^18.0.20 16 | react: ^18.2.0 17 | devDependencies: 18 | '@types/react': 18.0.20 19 | react: 18.2.0 20 | 21 | packages/micro-app-vue: 22 | specifiers: 23 | '@types/node': ^18.7.18 24 | '@vitejs/plugin-vue': ^3.1.0 25 | '@vitejs/plugin-vue-jsx': ^2.0.1 26 | vite: ^3.1.3 27 | vue: ^3.2.39 28 | vue-tsc: ^0.40.13 29 | devDependencies: 30 | '@types/node': 18.7.18 31 | '@vitejs/plugin-vue': 3.1.0_vite@3.1.3+vue@3.2.39 32 | '@vitejs/plugin-vue-jsx': 2.0.1_vite@3.1.3+vue@3.2.39 33 | vite: 3.1.3 34 | vue: 3.2.39 35 | vue-tsc: 0.40.13 36 | 37 | packages/micro-sub: 38 | specifiers: {} 39 | 40 | packages/micro-vite-plugin: 41 | specifiers: 42 | vite: ^3.1.3 43 | devDependencies: 44 | vite: 3.1.3 45 | 46 | packages: 47 | 48 | /@ampproject/remapping/2.1.2: 49 | resolution: {integrity: sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==} 50 | engines: {node: '>=6.0.0'} 51 | dependencies: 52 | '@jridgewell/trace-mapping': 0.3.4 53 | dev: true 54 | 55 | /@babel/code-frame/7.18.6: 56 | resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} 57 | engines: {node: '>=6.9.0'} 58 | dependencies: 59 | '@babel/highlight': 7.18.6 60 | dev: true 61 | 62 | /@babel/compat-data/7.19.1: 63 | resolution: {integrity: sha512-72a9ghR0gnESIa7jBN53U32FOVCEoztyIlKaNoU05zRhEecduGK9L9c3ww7Mp06JiR+0ls0GBPFJQwwtjn9ksg==} 64 | engines: {node: '>=6.9.0'} 65 | dev: true 66 | 67 | /@babel/core/7.19.1: 68 | resolution: {integrity: sha512-1H8VgqXme4UXCRv7/Wa1bq7RVymKOzC7znjyFM8KiEzwFqcKUKYNoQef4GhdklgNvoBXyW4gYhuBNCM5o1zImw==} 69 | engines: {node: '>=6.9.0'} 70 | dependencies: 71 | '@ampproject/remapping': 2.1.2 72 | '@babel/code-frame': 7.18.6 73 | '@babel/generator': 7.19.0 74 | '@babel/helper-compilation-targets': 7.19.1_@babel+core@7.19.1 75 | '@babel/helper-module-transforms': 7.19.0 76 | '@babel/helpers': 7.19.0 77 | '@babel/parser': 7.19.1 78 | '@babel/template': 7.18.10 79 | '@babel/traverse': 7.19.1 80 | '@babel/types': 7.19.0 81 | convert-source-map: 1.8.0 82 | debug: 4.3.3 83 | gensync: 1.0.0-beta.2 84 | json5: 2.2.1 85 | semver: 6.3.0 86 | transitivePeerDependencies: 87 | - supports-color 88 | dev: true 89 | 90 | /@babel/generator/7.19.0: 91 | resolution: {integrity: sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==} 92 | engines: {node: '>=6.9.0'} 93 | dependencies: 94 | '@babel/types': 7.19.0 95 | '@jridgewell/gen-mapping': 0.3.2 96 | jsesc: 2.5.2 97 | dev: true 98 | 99 | /@babel/helper-annotate-as-pure/7.18.6: 100 | resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} 101 | engines: {node: '>=6.9.0'} 102 | dependencies: 103 | '@babel/types': 7.19.0 104 | dev: true 105 | 106 | /@babel/helper-compilation-targets/7.19.1_@babel+core@7.19.1: 107 | resolution: {integrity: sha512-LlLkkqhCMyz2lkQPvJNdIYU7O5YjWRgC2R4omjCTpZd8u8KMQzZvX4qce+/BluN1rcQiV7BoGUpmQ0LeHerbhg==} 108 | engines: {node: '>=6.9.0'} 109 | peerDependencies: 110 | '@babel/core': ^7.0.0 111 | dependencies: 112 | '@babel/compat-data': 7.19.1 113 | '@babel/core': 7.19.1 114 | '@babel/helper-validator-option': 7.18.6 115 | browserslist: 4.21.4 116 | semver: 6.3.0 117 | dev: true 118 | 119 | /@babel/helper-create-class-features-plugin/7.19.0_@babel+core@7.19.1: 120 | resolution: {integrity: sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==} 121 | engines: {node: '>=6.9.0'} 122 | peerDependencies: 123 | '@babel/core': ^7.0.0 124 | dependencies: 125 | '@babel/core': 7.19.1 126 | '@babel/helper-annotate-as-pure': 7.18.6 127 | '@babel/helper-environment-visitor': 7.18.9 128 | '@babel/helper-function-name': 7.19.0 129 | '@babel/helper-member-expression-to-functions': 7.18.9 130 | '@babel/helper-optimise-call-expression': 7.18.6 131 | '@babel/helper-replace-supers': 7.19.1 132 | '@babel/helper-split-export-declaration': 7.18.6 133 | transitivePeerDependencies: 134 | - supports-color 135 | dev: true 136 | 137 | /@babel/helper-environment-visitor/7.16.7: 138 | resolution: {integrity: sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==} 139 | engines: {node: '>=6.9.0'} 140 | dependencies: 141 | '@babel/types': 7.19.0 142 | dev: true 143 | 144 | /@babel/helper-environment-visitor/7.18.9: 145 | resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} 146 | engines: {node: '>=6.9.0'} 147 | dev: true 148 | 149 | /@babel/helper-function-name/7.16.7: 150 | resolution: {integrity: sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==} 151 | engines: {node: '>=6.9.0'} 152 | dependencies: 153 | '@babel/helper-get-function-arity': 7.16.7 154 | '@babel/template': 7.18.10 155 | '@babel/types': 7.19.0 156 | dev: true 157 | 158 | /@babel/helper-function-name/7.19.0: 159 | resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} 160 | engines: {node: '>=6.9.0'} 161 | dependencies: 162 | '@babel/template': 7.18.10 163 | '@babel/types': 7.19.0 164 | dev: true 165 | 166 | /@babel/helper-get-function-arity/7.16.7: 167 | resolution: {integrity: sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==} 168 | engines: {node: '>=6.9.0'} 169 | dependencies: 170 | '@babel/types': 7.19.0 171 | dev: true 172 | 173 | /@babel/helper-hoist-variables/7.16.7: 174 | resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==} 175 | engines: {node: '>=6.9.0'} 176 | dependencies: 177 | '@babel/types': 7.19.0 178 | dev: true 179 | 180 | /@babel/helper-hoist-variables/7.18.6: 181 | resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} 182 | engines: {node: '>=6.9.0'} 183 | dependencies: 184 | '@babel/types': 7.19.0 185 | dev: true 186 | 187 | /@babel/helper-member-expression-to-functions/7.18.9: 188 | resolution: {integrity: sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==} 189 | engines: {node: '>=6.9.0'} 190 | dependencies: 191 | '@babel/types': 7.19.0 192 | dev: true 193 | 194 | /@babel/helper-module-imports/7.16.7: 195 | resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==} 196 | engines: {node: '>=6.9.0'} 197 | dependencies: 198 | '@babel/types': 7.19.0 199 | dev: true 200 | 201 | /@babel/helper-module-imports/7.18.6: 202 | resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} 203 | engines: {node: '>=6.9.0'} 204 | dependencies: 205 | '@babel/types': 7.19.0 206 | dev: true 207 | 208 | /@babel/helper-module-transforms/7.19.0: 209 | resolution: {integrity: sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==} 210 | engines: {node: '>=6.9.0'} 211 | dependencies: 212 | '@babel/helper-environment-visitor': 7.18.9 213 | '@babel/helper-module-imports': 7.18.6 214 | '@babel/helper-simple-access': 7.18.6 215 | '@babel/helper-split-export-declaration': 7.18.6 216 | '@babel/helper-validator-identifier': 7.19.1 217 | '@babel/template': 7.18.10 218 | '@babel/traverse': 7.19.1 219 | '@babel/types': 7.19.0 220 | transitivePeerDependencies: 221 | - supports-color 222 | dev: true 223 | 224 | /@babel/helper-optimise-call-expression/7.18.6: 225 | resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} 226 | engines: {node: '>=6.9.0'} 227 | dependencies: 228 | '@babel/types': 7.19.0 229 | dev: true 230 | 231 | /@babel/helper-plugin-utils/7.16.7: 232 | resolution: {integrity: sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==} 233 | engines: {node: '>=6.9.0'} 234 | dev: true 235 | 236 | /@babel/helper-plugin-utils/7.19.0: 237 | resolution: {integrity: sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==} 238 | engines: {node: '>=6.9.0'} 239 | dev: true 240 | 241 | /@babel/helper-replace-supers/7.19.1: 242 | resolution: {integrity: sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==} 243 | engines: {node: '>=6.9.0'} 244 | dependencies: 245 | '@babel/helper-environment-visitor': 7.18.9 246 | '@babel/helper-member-expression-to-functions': 7.18.9 247 | '@babel/helper-optimise-call-expression': 7.18.6 248 | '@babel/traverse': 7.19.1 249 | '@babel/types': 7.19.0 250 | transitivePeerDependencies: 251 | - supports-color 252 | dev: true 253 | 254 | /@babel/helper-simple-access/7.18.6: 255 | resolution: {integrity: sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==} 256 | engines: {node: '>=6.9.0'} 257 | dependencies: 258 | '@babel/types': 7.19.0 259 | dev: true 260 | 261 | /@babel/helper-split-export-declaration/7.16.7: 262 | resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==} 263 | engines: {node: '>=6.9.0'} 264 | dependencies: 265 | '@babel/types': 7.19.0 266 | dev: true 267 | 268 | /@babel/helper-split-export-declaration/7.18.6: 269 | resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} 270 | engines: {node: '>=6.9.0'} 271 | dependencies: 272 | '@babel/types': 7.19.0 273 | dev: true 274 | 275 | /@babel/helper-string-parser/7.18.10: 276 | resolution: {integrity: sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==} 277 | engines: {node: '>=6.9.0'} 278 | dev: true 279 | 280 | /@babel/helper-validator-identifier/7.16.7: 281 | resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} 282 | engines: {node: '>=6.9.0'} 283 | dev: true 284 | 285 | /@babel/helper-validator-identifier/7.19.1: 286 | resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} 287 | engines: {node: '>=6.9.0'} 288 | dev: true 289 | 290 | /@babel/helper-validator-option/7.18.6: 291 | resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} 292 | engines: {node: '>=6.9.0'} 293 | dev: true 294 | 295 | /@babel/helpers/7.19.0: 296 | resolution: {integrity: sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==} 297 | engines: {node: '>=6.9.0'} 298 | dependencies: 299 | '@babel/template': 7.18.10 300 | '@babel/traverse': 7.19.1 301 | '@babel/types': 7.19.0 302 | transitivePeerDependencies: 303 | - supports-color 304 | dev: true 305 | 306 | /@babel/highlight/7.18.6: 307 | resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} 308 | engines: {node: '>=6.9.0'} 309 | dependencies: 310 | '@babel/helper-validator-identifier': 7.19.1 311 | chalk: 2.4.2 312 | js-tokens: 4.0.0 313 | dev: true 314 | 315 | /@babel/parser/7.17.7: 316 | resolution: {integrity: sha512-bm3AQf45vR4gKggRfvJdYJ0gFLoCbsPxiFLSH6hTVYABptNHY6l9NrhnucVjQ/X+SPtLANT9lc0fFhikj+VBRA==} 317 | engines: {node: '>=6.0.0'} 318 | hasBin: true 319 | dependencies: 320 | '@babel/types': 7.17.0 321 | dev: true 322 | 323 | /@babel/parser/7.19.1: 324 | resolution: {integrity: sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==} 325 | engines: {node: '>=6.0.0'} 326 | hasBin: true 327 | dependencies: 328 | '@babel/types': 7.19.0 329 | dev: true 330 | 331 | /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.19.1: 332 | resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} 333 | peerDependencies: 334 | '@babel/core': ^7.0.0-0 335 | dependencies: 336 | '@babel/core': 7.19.1 337 | '@babel/helper-plugin-utils': 7.16.7 338 | dev: true 339 | 340 | /@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.19.1: 341 | resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==} 342 | engines: {node: '>=6.9.0'} 343 | peerDependencies: 344 | '@babel/core': ^7.0.0-0 345 | dependencies: 346 | '@babel/core': 7.19.1 347 | '@babel/helper-plugin-utils': 7.19.0 348 | dev: true 349 | 350 | /@babel/plugin-syntax-typescript/7.18.6_@babel+core@7.19.1: 351 | resolution: {integrity: sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==} 352 | engines: {node: '>=6.9.0'} 353 | peerDependencies: 354 | '@babel/core': ^7.0.0-0 355 | dependencies: 356 | '@babel/core': 7.19.1 357 | '@babel/helper-plugin-utils': 7.19.0 358 | dev: true 359 | 360 | /@babel/plugin-transform-typescript/7.19.1_@babel+core@7.19.1: 361 | resolution: {integrity: sha512-+ILcOU+6mWLlvCwnL920m2Ow3wWx3Wo8n2t5aROQmV55GZt+hOiLvBaa3DNzRjSEHa1aauRs4/YLmkCfFkhhRQ==} 362 | engines: {node: '>=6.9.0'} 363 | peerDependencies: 364 | '@babel/core': ^7.0.0-0 365 | dependencies: 366 | '@babel/core': 7.19.1 367 | '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.19.1 368 | '@babel/helper-plugin-utils': 7.19.0 369 | '@babel/plugin-syntax-typescript': 7.18.6_@babel+core@7.19.1 370 | transitivePeerDependencies: 371 | - supports-color 372 | dev: true 373 | 374 | /@babel/template/7.16.7: 375 | resolution: {integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==} 376 | engines: {node: '>=6.9.0'} 377 | dependencies: 378 | '@babel/code-frame': 7.18.6 379 | '@babel/parser': 7.19.1 380 | '@babel/types': 7.19.0 381 | dev: true 382 | 383 | /@babel/template/7.18.10: 384 | resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} 385 | engines: {node: '>=6.9.0'} 386 | dependencies: 387 | '@babel/code-frame': 7.18.6 388 | '@babel/parser': 7.19.1 389 | '@babel/types': 7.19.0 390 | dev: true 391 | 392 | /@babel/traverse/7.17.3: 393 | resolution: {integrity: sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==} 394 | engines: {node: '>=6.9.0'} 395 | dependencies: 396 | '@babel/code-frame': 7.18.6 397 | '@babel/generator': 7.19.0 398 | '@babel/helper-environment-visitor': 7.16.7 399 | '@babel/helper-function-name': 7.16.7 400 | '@babel/helper-hoist-variables': 7.16.7 401 | '@babel/helper-split-export-declaration': 7.16.7 402 | '@babel/parser': 7.19.1 403 | '@babel/types': 7.19.0 404 | debug: 4.3.3 405 | globals: 11.12.0 406 | transitivePeerDependencies: 407 | - supports-color 408 | dev: true 409 | 410 | /@babel/traverse/7.19.1: 411 | resolution: {integrity: sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA==} 412 | engines: {node: '>=6.9.0'} 413 | dependencies: 414 | '@babel/code-frame': 7.18.6 415 | '@babel/generator': 7.19.0 416 | '@babel/helper-environment-visitor': 7.18.9 417 | '@babel/helper-function-name': 7.19.0 418 | '@babel/helper-hoist-variables': 7.18.6 419 | '@babel/helper-split-export-declaration': 7.18.6 420 | '@babel/parser': 7.19.1 421 | '@babel/types': 7.19.0 422 | debug: 4.3.3 423 | globals: 11.12.0 424 | transitivePeerDependencies: 425 | - supports-color 426 | dev: true 427 | 428 | /@babel/types/7.17.0: 429 | resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} 430 | engines: {node: '>=6.9.0'} 431 | dependencies: 432 | '@babel/helper-validator-identifier': 7.16.7 433 | to-fast-properties: 2.0.0 434 | dev: true 435 | 436 | /@babel/types/7.19.0: 437 | resolution: {integrity: sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==} 438 | engines: {node: '>=6.9.0'} 439 | dependencies: 440 | '@babel/helper-string-parser': 7.18.10 441 | '@babel/helper-validator-identifier': 7.19.1 442 | to-fast-properties: 2.0.0 443 | dev: true 444 | 445 | /@esbuild/android-arm/0.15.8: 446 | resolution: {integrity: sha512-CyEWALmn+no/lbgbAJsbuuhT8s2J19EJGHkeyAwjbFJMrj80KJ9zuYsoAvidPTU7BgBf87r/sgae8Tw0dbOc4Q==} 447 | engines: {node: '>=12'} 448 | cpu: [arm] 449 | os: [android] 450 | requiresBuild: true 451 | dependencies: 452 | esbuild-wasm: 0.15.8 453 | dev: true 454 | optional: true 455 | 456 | /@esbuild/linux-loong64/0.15.8: 457 | resolution: {integrity: sha512-pE5RQsOTSERCtfZdfCT25wzo7dfhOSlhAXcsZmuvRYhendOv7djcdvtINdnDp2DAjP17WXlBB4nBO6sHLczmsg==} 458 | engines: {node: '>=12'} 459 | cpu: [loong64] 460 | os: [linux] 461 | requiresBuild: true 462 | dev: true 463 | optional: true 464 | 465 | /@jridgewell/gen-mapping/0.3.2: 466 | resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} 467 | engines: {node: '>=6.0.0'} 468 | dependencies: 469 | '@jridgewell/set-array': 1.1.2 470 | '@jridgewell/sourcemap-codec': 1.4.11 471 | '@jridgewell/trace-mapping': 0.3.15 472 | dev: true 473 | 474 | /@jridgewell/resolve-uri/3.0.5: 475 | resolution: {integrity: sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==} 476 | engines: {node: '>=6.0.0'} 477 | dev: true 478 | 479 | /@jridgewell/set-array/1.1.2: 480 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 481 | engines: {node: '>=6.0.0'} 482 | dev: true 483 | 484 | /@jridgewell/sourcemap-codec/1.4.11: 485 | resolution: {integrity: sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==} 486 | dev: true 487 | 488 | /@jridgewell/trace-mapping/0.3.15: 489 | resolution: {integrity: sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==} 490 | dependencies: 491 | '@jridgewell/resolve-uri': 3.0.5 492 | '@jridgewell/sourcemap-codec': 1.4.11 493 | dev: true 494 | 495 | /@jridgewell/trace-mapping/0.3.4: 496 | resolution: {integrity: sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==} 497 | dependencies: 498 | '@jridgewell/resolve-uri': 3.0.5 499 | '@jridgewell/sourcemap-codec': 1.4.11 500 | dev: true 501 | 502 | /@types/node/18.7.18: 503 | resolution: {integrity: sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg==} 504 | dev: true 505 | 506 | /@types/prop-types/15.7.4: 507 | resolution: {integrity: sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==} 508 | dev: true 509 | 510 | /@types/react/18.0.20: 511 | resolution: {integrity: sha512-MWul1teSPxujEHVwZl4a5HxQ9vVNsjTchVA+xRqv/VYGCuKGAU6UhfrTdF5aBefwD1BHUD8i/zq+O/vyCm/FrA==} 512 | dependencies: 513 | '@types/prop-types': 15.7.4 514 | '@types/scheduler': 0.16.2 515 | csstype: 3.0.10 516 | dev: true 517 | 518 | /@types/scheduler/0.16.2: 519 | resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} 520 | dev: true 521 | 522 | /@vitejs/plugin-vue-jsx/2.0.1_vite@3.1.3+vue@3.2.39: 523 | resolution: {integrity: sha512-lmiR1k9+lrF7LMczO0pxtQ8mOn6XeppJDHxnpxkJQpT5SiKz4SKhKdeNstXaTNuR8qZhUo5X0pJlcocn72Y4Jg==} 524 | engines: {node: ^14.18.0 || >=16.0.0} 525 | peerDependencies: 526 | vite: ^3.0.0 527 | vue: ^3.0.0 528 | dependencies: 529 | '@babel/core': 7.19.1 530 | '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.19.1 531 | '@babel/plugin-transform-typescript': 7.19.1_@babel+core@7.19.1 532 | '@vue/babel-plugin-jsx': 1.1.1_@babel+core@7.19.1 533 | vite: 3.1.3 534 | vue: 3.2.39 535 | transitivePeerDependencies: 536 | - supports-color 537 | dev: true 538 | 539 | /@vitejs/plugin-vue/3.1.0_vite@3.1.3+vue@3.2.39: 540 | resolution: {integrity: sha512-fmxtHPjSOEIRg6vHYDaem+97iwCUg/uSIaTzp98lhELt2ISOQuDo2hbkBdXod0g15IhfPMQmAxh4heUks2zvDA==} 541 | engines: {node: ^14.18.0 || >=16.0.0} 542 | peerDependencies: 543 | vite: ^3.0.0 544 | vue: ^3.2.25 545 | dependencies: 546 | vite: 3.1.3 547 | vue: 3.2.39 548 | dev: true 549 | 550 | /@volar/code-gen/0.40.13: 551 | resolution: {integrity: sha512-4gShBWuMce868OVvgyA1cU5WxHbjfEme18Tw6uVMfweZCF5fB2KECG0iPrA9D54vHk3FeHarODNwgIaaFfUBlA==} 552 | dependencies: 553 | '@volar/source-map': 0.40.13 554 | dev: true 555 | 556 | /@volar/source-map/0.40.13: 557 | resolution: {integrity: sha512-dbdkAB2Nxb0wLjAY5O64o3ywVWlAGONnBIoKAkXSf6qkGZM+nJxcizsoiI66K+RHQG0XqlyvjDizfnTxr+6PWg==} 558 | dependencies: 559 | '@vue/reactivity': 3.2.38 560 | dev: true 561 | 562 | /@volar/typescript-faster/0.40.13: 563 | resolution: {integrity: sha512-uy+TlcFkKoNlKEnxA4x5acxdxLyVDIXGSc8cYDNXpPKjBKXrQaetzCzlO3kVBqu1VLMxKNGJMTKn35mo+ILQmw==} 564 | dependencies: 565 | semver: 7.3.7 566 | dev: true 567 | 568 | /@volar/vue-language-core/0.40.13: 569 | resolution: {integrity: sha512-QkCb8msi2KUitTdM6Y4kAb7/ZlEvuLcbBFOC2PLBlFuoZwyxvSP7c/dBGmKGtJlEvMX0LdCyrg5V2aBYxD38/Q==} 570 | dependencies: 571 | '@volar/code-gen': 0.40.13 572 | '@volar/source-map': 0.40.13 573 | '@vue/compiler-core': 3.2.39 574 | '@vue/compiler-dom': 3.2.39 575 | '@vue/compiler-sfc': 3.2.39 576 | '@vue/reactivity': 3.2.39 577 | '@vue/shared': 3.2.39 578 | dev: true 579 | 580 | /@volar/vue-typescript/0.40.13: 581 | resolution: {integrity: sha512-o7bNztwjs8JmbQjVkrnbZUOfm7q4B8ZYssETISN1tRaBdun6cfNqgpkvDYd+VUBh1O4CdksvN+5BUNnwAz4oCQ==} 582 | dependencies: 583 | '@volar/code-gen': 0.40.13 584 | '@volar/typescript-faster': 0.40.13 585 | '@volar/vue-language-core': 0.40.13 586 | dev: true 587 | 588 | /@vue/babel-helper-vue-transform-on/1.0.2: 589 | resolution: {integrity: sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==} 590 | dev: true 591 | 592 | /@vue/babel-plugin-jsx/1.1.1_@babel+core@7.19.1: 593 | resolution: {integrity: sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==} 594 | dependencies: 595 | '@babel/helper-module-imports': 7.16.7 596 | '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.19.1 597 | '@babel/template': 7.16.7 598 | '@babel/traverse': 7.17.3 599 | '@babel/types': 7.17.0 600 | '@vue/babel-helper-vue-transform-on': 1.0.2 601 | camelcase: 6.3.0 602 | html-tags: 3.1.0 603 | svg-tags: 1.0.0 604 | transitivePeerDependencies: 605 | - '@babel/core' 606 | - supports-color 607 | dev: true 608 | 609 | /@vue/compiler-core/3.2.39: 610 | resolution: {integrity: sha512-mf/36OWXqWn0wsC40nwRRGheR/qoID+lZXbIuLnr4/AngM0ov8Xvv8GHunC0rKRIkh60bTqydlqTeBo49rlbqw==} 611 | dependencies: 612 | '@babel/parser': 7.17.7 613 | '@vue/shared': 3.2.39 614 | estree-walker: 2.0.2 615 | source-map: 0.6.1 616 | dev: true 617 | 618 | /@vue/compiler-dom/3.2.39: 619 | resolution: {integrity: sha512-HMFI25Be1C8vLEEv1hgEO1dWwG9QQ8LTTPmCkblVJY/O3OvWx6r1+zsox5mKPMGvqYEZa6l8j+xgOfUspgo7hw==} 620 | dependencies: 621 | '@vue/compiler-core': 3.2.39 622 | '@vue/shared': 3.2.39 623 | dev: true 624 | 625 | /@vue/compiler-sfc/3.2.39: 626 | resolution: {integrity: sha512-fqAQgFs1/BxTUZkd0Vakn3teKUt//J3c420BgnYgEOoVdTwYpBTSXCMJ88GOBCylmUBbtquGPli9tVs7LzsWIA==} 627 | dependencies: 628 | '@babel/parser': 7.17.7 629 | '@vue/compiler-core': 3.2.39 630 | '@vue/compiler-dom': 3.2.39 631 | '@vue/compiler-ssr': 3.2.39 632 | '@vue/reactivity-transform': 3.2.39 633 | '@vue/shared': 3.2.39 634 | estree-walker: 2.0.2 635 | magic-string: 0.25.9 636 | postcss: 8.4.12 637 | source-map: 0.6.1 638 | dev: true 639 | 640 | /@vue/compiler-ssr/3.2.39: 641 | resolution: {integrity: sha512-EoGCJ6lincKOZGW+0Ky4WOKsSmqL7hp1ZYgen8M7u/mlvvEQUaO9tKKOy7K43M9U2aA3tPv0TuYYQFrEbK2eFQ==} 642 | dependencies: 643 | '@vue/compiler-dom': 3.2.39 644 | '@vue/shared': 3.2.39 645 | dev: true 646 | 647 | /@vue/reactivity-transform/3.2.39: 648 | resolution: {integrity: sha512-HGuWu864zStiWs9wBC6JYOP1E00UjMdDWIG5W+FpUx28hV3uz9ODOKVNm/vdOy/Pvzg8+OcANxAVC85WFBbl3A==} 649 | dependencies: 650 | '@babel/parser': 7.17.7 651 | '@vue/compiler-core': 3.2.39 652 | '@vue/shared': 3.2.39 653 | estree-walker: 2.0.2 654 | magic-string: 0.25.9 655 | dev: true 656 | 657 | /@vue/reactivity/3.2.38: 658 | resolution: {integrity: sha512-6L4myYcH9HG2M25co7/BSo0skKFHpAN8PhkNPM4xRVkyGl1K5M3Jx4rp5bsYhvYze2K4+l+pioN4e6ZwFLUVtw==} 659 | dependencies: 660 | '@vue/shared': 3.2.38 661 | dev: true 662 | 663 | /@vue/reactivity/3.2.39: 664 | resolution: {integrity: sha512-vlaYX2a3qMhIZfrw3Mtfd+BuU+TZmvDrPMa+6lpfzS9k/LnGxkSuf0fhkP0rMGfiOHPtyKoU9OJJJFGm92beVQ==} 665 | dependencies: 666 | '@vue/shared': 3.2.39 667 | dev: true 668 | 669 | /@vue/runtime-core/3.2.39: 670 | resolution: {integrity: sha512-xKH5XP57JW5JW+8ZG1khBbuLakINTgPuINKL01hStWLTTGFOrM49UfCFXBcFvWmSbci3gmJyLl2EAzCaZWsx8g==} 671 | dependencies: 672 | '@vue/reactivity': 3.2.39 673 | '@vue/shared': 3.2.39 674 | dev: true 675 | 676 | /@vue/runtime-dom/3.2.39: 677 | resolution: {integrity: sha512-4G9AEJP+sLhsqf5wXcyKVWQKUhI+iWfy0hWQgea+CpaTD7BR0KdQzvoQdZhwCY6B3oleSyNLkLAQwm0ya/wNoA==} 678 | dependencies: 679 | '@vue/runtime-core': 3.2.39 680 | '@vue/shared': 3.2.39 681 | csstype: 2.6.20 682 | dev: true 683 | 684 | /@vue/server-renderer/3.2.39_vue@3.2.39: 685 | resolution: {integrity: sha512-1yn9u2YBQWIgytFMjz4f/t0j43awKytTGVptfd3FtBk76t1pd8mxbek0G/DrnjJhd2V7mSTb5qgnxMYt8Z5iSQ==} 686 | peerDependencies: 687 | vue: 3.2.39 688 | dependencies: 689 | '@vue/compiler-ssr': 3.2.39 690 | '@vue/shared': 3.2.39 691 | vue: 3.2.39 692 | dev: true 693 | 694 | /@vue/shared/3.2.38: 695 | resolution: {integrity: sha512-dTyhTIRmGXBjxJE+skC8tTWCGLCVc4wQgRRLt8+O9p5ewBAjoBwtCAkLPrtToSr1xltoe3st21Pv953aOZ7alg==} 696 | dev: true 697 | 698 | /@vue/shared/3.2.39: 699 | resolution: {integrity: sha512-D3dl2ZB9qE6mTuWPk9RlhDeP1dgNRUKC3NJxji74A4yL8M2MwlhLKUC/49WHjrNzSPug58fWx/yFbaTzGAQSBw==} 700 | dev: true 701 | 702 | /ansi-styles/3.2.1: 703 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 704 | engines: {node: '>=4'} 705 | dependencies: 706 | color-convert: 1.9.3 707 | dev: true 708 | 709 | /browserslist/4.21.4: 710 | resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} 711 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 712 | hasBin: true 713 | dependencies: 714 | caniuse-lite: 1.0.30001408 715 | electron-to-chromium: 1.4.256 716 | node-releases: 2.0.6 717 | update-browserslist-db: 1.0.9_browserslist@4.21.4 718 | dev: true 719 | 720 | /camelcase/6.3.0: 721 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 722 | engines: {node: '>=10'} 723 | dev: true 724 | 725 | /caniuse-lite/1.0.30001408: 726 | resolution: {integrity: sha512-DdUCktgMSM+1ndk9EFMZcavsGszV7zxV9O7MtOHniTa/iyAIwJCF0dFVBdU9SijJbfh29hC9bCs07wu8pjnGJQ==} 727 | dev: true 728 | 729 | /chalk/2.4.2: 730 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 731 | engines: {node: '>=4'} 732 | dependencies: 733 | ansi-styles: 3.2.1 734 | escape-string-regexp: 1.0.5 735 | supports-color: 5.5.0 736 | dev: true 737 | 738 | /color-convert/1.9.3: 739 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 740 | dependencies: 741 | color-name: 1.1.3 742 | dev: true 743 | 744 | /color-name/1.1.3: 745 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 746 | dev: true 747 | 748 | /convert-source-map/1.8.0: 749 | resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} 750 | dependencies: 751 | safe-buffer: 5.1.2 752 | dev: true 753 | 754 | /csstype/2.6.20: 755 | resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==} 756 | dev: true 757 | 758 | /csstype/3.0.10: 759 | resolution: {integrity: sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==} 760 | dev: true 761 | 762 | /debug/4.3.3: 763 | resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} 764 | engines: {node: '>=6.0'} 765 | peerDependencies: 766 | supports-color: '*' 767 | peerDependenciesMeta: 768 | supports-color: 769 | optional: true 770 | dependencies: 771 | ms: 2.1.2 772 | dev: true 773 | 774 | /electron-to-chromium/1.4.256: 775 | resolution: {integrity: sha512-x+JnqyluoJv8I0U9gVe+Sk2st8vF0CzMt78SXxuoWCooLLY2k5VerIBdpvG7ql6GKI4dzNnPjmqgDJ76EdaAKw==} 776 | dev: true 777 | 778 | /esbuild-android-64/0.15.8: 779 | resolution: {integrity: sha512-bVh8FIKOolF7/d4AMzt7xHlL0Ljr+mYKSHI39TJWDkybVWHdn6+4ODL3xZGHOxPpdRpitemXA1WwMKYBsw8dGw==} 780 | engines: {node: '>=12'} 781 | cpu: [x64] 782 | os: [android] 783 | requiresBuild: true 784 | dependencies: 785 | esbuild-wasm: 0.15.8 786 | dev: true 787 | optional: true 788 | 789 | /esbuild-android-arm64/0.15.8: 790 | resolution: {integrity: sha512-ReAMDAHuo0H1h9LxRabI6gwYPn8k6WiUeyxuMvx17yTrJO+SCnIfNc/TSPFvDwtK9MiyiKG/2dBYHouT/M0BXQ==} 791 | engines: {node: '>=12'} 792 | cpu: [arm64] 793 | os: [android] 794 | requiresBuild: true 795 | dev: true 796 | optional: true 797 | 798 | /esbuild-darwin-64/0.15.8: 799 | resolution: {integrity: sha512-KaKcGfJ+yto7Fo5gAj3xwxHMd1fBIKatpCHK8znTJLVv+9+NN2/tIPBqA4w5rBwjX0UqXDeIE2v1xJP+nGEXgA==} 800 | engines: {node: '>=12'} 801 | cpu: [x64] 802 | os: [darwin] 803 | requiresBuild: true 804 | dev: true 805 | optional: true 806 | 807 | /esbuild-darwin-arm64/0.15.8: 808 | resolution: {integrity: sha512-8tjEaBgAKnXCkP7bhEJmEqdG9HEV6oLkF36BrMzpfW2rgaw0c48Zrxe+9RlfeGvs6gDF4w+agXyTjikzsS3izw==} 809 | engines: {node: '>=12'} 810 | cpu: [arm64] 811 | os: [darwin] 812 | requiresBuild: true 813 | dev: true 814 | optional: true 815 | 816 | /esbuild-freebsd-64/0.15.8: 817 | resolution: {integrity: sha512-jaxcsGHYzn2L0/lffON2WfH4Nc+d/EwozVTP5K2v016zxMb5UQMhLoJzvLgBqHT1SG0B/mO+a+THnJCMVg15zw==} 818 | engines: {node: '>=12'} 819 | cpu: [x64] 820 | os: [freebsd] 821 | requiresBuild: true 822 | dev: true 823 | optional: true 824 | 825 | /esbuild-freebsd-arm64/0.15.8: 826 | resolution: {integrity: sha512-2xp2UlljMvX8HExtcg7VHaeQk8OBU0CSl1j18B5CcZmSDkLF9p3utuMXIopG3a08fr9Hv+Dz6+seSXUow/G51w==} 827 | engines: {node: '>=12'} 828 | cpu: [arm64] 829 | os: [freebsd] 830 | requiresBuild: true 831 | dev: true 832 | optional: true 833 | 834 | /esbuild-linux-32/0.15.8: 835 | resolution: {integrity: sha512-9u1E54BRz1FQMl86iaHK146+4ID2KYNxL3trLZT4QLLx3M7Q9n4lGG3lrzqUatGR2cKy8c33b0iaCzsItZWkFg==} 836 | engines: {node: '>=12'} 837 | cpu: [ia32] 838 | os: [linux] 839 | requiresBuild: true 840 | dev: true 841 | optional: true 842 | 843 | /esbuild-linux-64/0.15.8: 844 | resolution: {integrity: sha512-4HxrsN9eUzJXdVGMTYA5Xler82FuZUu21bXKN42zcLHHNKCAMPUzD62I+GwDhsdgUBAUj0tRXDdsQHgaP6v0HA==} 845 | engines: {node: '>=12'} 846 | cpu: [x64] 847 | os: [linux] 848 | requiresBuild: true 849 | dev: true 850 | optional: true 851 | 852 | /esbuild-linux-arm/0.15.8: 853 | resolution: {integrity: sha512-7DVBU9SFjX4+vBwt8tHsUCbE6Vvl6y6FQWHAgyw1lybC5gULqn/WnjHYHN2/LJaZRsDBvxWT4msEgwLGq1Wd3Q==} 854 | engines: {node: '>=12'} 855 | cpu: [arm] 856 | os: [linux] 857 | requiresBuild: true 858 | dev: true 859 | optional: true 860 | 861 | /esbuild-linux-arm64/0.15.8: 862 | resolution: {integrity: sha512-1OCm7Aq0tEJT70PbxmHSGYDLYP8DKH8r4Nk7/XbVzWaduo9beCjGBB+tGZIHK6DdTQ3h00/4Tb/70YMH/bOtKg==} 863 | engines: {node: '>=12'} 864 | cpu: [arm64] 865 | os: [linux] 866 | requiresBuild: true 867 | dev: true 868 | optional: true 869 | 870 | /esbuild-linux-mips64le/0.15.8: 871 | resolution: {integrity: sha512-yeFoNPVFPEzZvFYBfUQNG2TjGRaCyV1E27OcOg4LOtnGrxb2wA+mkW3luckyv1CEyd00mpAg7UdHx8nlx3ghgA==} 872 | engines: {node: '>=12'} 873 | cpu: [mips64el] 874 | os: [linux] 875 | requiresBuild: true 876 | dev: true 877 | optional: true 878 | 879 | /esbuild-linux-ppc64le/0.15.8: 880 | resolution: {integrity: sha512-CEyMMUUNabXibw8OSNmBXhOIGhnjNVl5Lpseiuf00iKN0V47oqDrbo4dsHz1wH62m49AR8iG8wpDlTqfYgKbtg==} 881 | engines: {node: '>=12'} 882 | cpu: [ppc64] 883 | os: [linux] 884 | requiresBuild: true 885 | dev: true 886 | optional: true 887 | 888 | /esbuild-linux-riscv64/0.15.8: 889 | resolution: {integrity: sha512-OCGSOaspMUjexSCU8ZiA0UnV/NiRU+s2vIfEcAQWQ6u32R+2luyfh/4ZaY6jFbylJE07Esc/yRvb9Q5fXuClXA==} 890 | engines: {node: '>=12'} 891 | cpu: [riscv64] 892 | os: [linux] 893 | requiresBuild: true 894 | dev: true 895 | optional: true 896 | 897 | /esbuild-linux-s390x/0.15.8: 898 | resolution: {integrity: sha512-RHdpdfxRTSrZXZJlFSLazFU4YwXLB5Rgf6Zr5rffqSsO4y9JybgtKO38bFwxZNlDXliYISXN/YROKrG9s7mZQA==} 899 | engines: {node: '>=12'} 900 | cpu: [s390x] 901 | os: [linux] 902 | requiresBuild: true 903 | dev: true 904 | optional: true 905 | 906 | /esbuild-netbsd-64/0.15.8: 907 | resolution: {integrity: sha512-VolFFRatBH09T5QMWhiohAWCOien1R1Uz9K0BRVVTBgBaVBt7eArsXTKxVhUgRf2vwu2c2SXkuP0r7HLG0eozw==} 908 | engines: {node: '>=12'} 909 | cpu: [x64] 910 | os: [netbsd] 911 | requiresBuild: true 912 | dev: true 913 | optional: true 914 | 915 | /esbuild-openbsd-64/0.15.8: 916 | resolution: {integrity: sha512-HTAPlg+n4kUeE/isQxlCfsOz0xJGNoT5LJ9oYZWFKABfVf4Ycu7Zlf5ITgOnrdheTkz8JeL/gISIOCFAoOXrSA==} 917 | engines: {node: '>=12'} 918 | cpu: [x64] 919 | os: [openbsd] 920 | requiresBuild: true 921 | dev: true 922 | optional: true 923 | 924 | /esbuild-sunos-64/0.15.8: 925 | resolution: {integrity: sha512-qMP/jR/FzcIOwKj+W+Lb+8Cfr8GZHbHUJxAPi7DUhNZMQ/6y7sOgRzlOSpRrbbUntrRZh0MqOyDhJ3Gpo6L1QA==} 926 | engines: {node: '>=12'} 927 | cpu: [x64] 928 | os: [sunos] 929 | requiresBuild: true 930 | dev: true 931 | optional: true 932 | 933 | /esbuild-wasm/0.15.8: 934 | resolution: {integrity: sha512-Y7uCl5RNO4URjlemjdx++ukVHEMt5s5AfMWYUnMiK4Sry+pPCvQIctzXq6r6FKCyGKjX6/NGMCqR2OX6aLxj0w==} 935 | engines: {node: '>=12'} 936 | hasBin: true 937 | requiresBuild: true 938 | dev: true 939 | optional: true 940 | 941 | /esbuild-windows-32/0.15.8: 942 | resolution: {integrity: sha512-RKR1QHh4iWzjUhkP8Yqi75PPz/KS+b8zw3wUrzw6oAkj+iU5Qtyj61ZDaSG3Qf2vc6hTIUiPqVTqBH0NpXFNwg==} 943 | engines: {node: '>=12'} 944 | cpu: [ia32] 945 | os: [win32] 946 | requiresBuild: true 947 | dev: true 948 | optional: true 949 | 950 | /esbuild-windows-64/0.15.8: 951 | resolution: {integrity: sha512-ag9ptYrsizgsR+PQE8QKeMqnosLvAMonQREpLw4evA4FFgOBMLEat/dY/9txbpozTw9eEOYyD3a4cE9yTu20FA==} 952 | engines: {node: '>=12'} 953 | cpu: [x64] 954 | os: [win32] 955 | requiresBuild: true 956 | dev: true 957 | optional: true 958 | 959 | /esbuild-windows-arm64/0.15.8: 960 | resolution: {integrity: sha512-dbpAb0VyPaUs9mgw65KRfQ9rqiWCHpNzrJusoPu+LpEoswosjt/tFxN7cd2l68AT4qWdBkzAjDLRon7uqMeWcg==} 961 | engines: {node: '>=12'} 962 | cpu: [arm64] 963 | os: [win32] 964 | requiresBuild: true 965 | dev: true 966 | optional: true 967 | 968 | /esbuild/0.15.8: 969 | resolution: {integrity: sha512-Remsk2dmr1Ia65sU+QasE6svJbsHe62lzR+CnjpUvbZ+uSYo1SitiOWPRfZQkCu82YWZBBKXiD/j0i//XWMZ+Q==} 970 | engines: {node: '>=12'} 971 | hasBin: true 972 | requiresBuild: true 973 | optionalDependencies: 974 | '@esbuild/android-arm': 0.15.8 975 | '@esbuild/linux-loong64': 0.15.8 976 | esbuild-android-64: 0.15.8 977 | esbuild-android-arm64: 0.15.8 978 | esbuild-darwin-64: 0.15.8 979 | esbuild-darwin-arm64: 0.15.8 980 | esbuild-freebsd-64: 0.15.8 981 | esbuild-freebsd-arm64: 0.15.8 982 | esbuild-linux-32: 0.15.8 983 | esbuild-linux-64: 0.15.8 984 | esbuild-linux-arm: 0.15.8 985 | esbuild-linux-arm64: 0.15.8 986 | esbuild-linux-mips64le: 0.15.8 987 | esbuild-linux-ppc64le: 0.15.8 988 | esbuild-linux-riscv64: 0.15.8 989 | esbuild-linux-s390x: 0.15.8 990 | esbuild-netbsd-64: 0.15.8 991 | esbuild-openbsd-64: 0.15.8 992 | esbuild-sunos-64: 0.15.8 993 | esbuild-windows-32: 0.15.8 994 | esbuild-windows-64: 0.15.8 995 | esbuild-windows-arm64: 0.15.8 996 | dev: true 997 | 998 | /escalade/3.1.1: 999 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1000 | engines: {node: '>=6'} 1001 | dev: true 1002 | 1003 | /escape-string-regexp/1.0.5: 1004 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1005 | engines: {node: '>=0.8.0'} 1006 | dev: true 1007 | 1008 | /estree-walker/2.0.2: 1009 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 1010 | dev: true 1011 | 1012 | /fsevents/2.3.2: 1013 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1014 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1015 | os: [darwin] 1016 | requiresBuild: true 1017 | dev: true 1018 | optional: true 1019 | 1020 | /function-bind/1.1.1: 1021 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1022 | dev: true 1023 | 1024 | /gensync/1.0.0-beta.2: 1025 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1026 | engines: {node: '>=6.9.0'} 1027 | dev: true 1028 | 1029 | /globals/11.12.0: 1030 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1031 | engines: {node: '>=4'} 1032 | dev: true 1033 | 1034 | /has-flag/3.0.0: 1035 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1036 | engines: {node: '>=4'} 1037 | dev: true 1038 | 1039 | /has/1.0.3: 1040 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1041 | engines: {node: '>= 0.4.0'} 1042 | dependencies: 1043 | function-bind: 1.1.1 1044 | dev: true 1045 | 1046 | /html-tags/3.1.0: 1047 | resolution: {integrity: sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==} 1048 | engines: {node: '>=8'} 1049 | dev: true 1050 | 1051 | /is-core-module/2.10.0: 1052 | resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} 1053 | dependencies: 1054 | has: 1.0.3 1055 | dev: true 1056 | 1057 | /js-tokens/4.0.0: 1058 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1059 | dev: true 1060 | 1061 | /jsesc/2.5.2: 1062 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 1063 | engines: {node: '>=4'} 1064 | hasBin: true 1065 | dev: true 1066 | 1067 | /json5/2.2.1: 1068 | resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} 1069 | engines: {node: '>=6'} 1070 | hasBin: true 1071 | dev: true 1072 | 1073 | /loose-envify/1.4.0: 1074 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1075 | hasBin: true 1076 | dependencies: 1077 | js-tokens: 4.0.0 1078 | dev: true 1079 | 1080 | /lru-cache/6.0.0: 1081 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1082 | engines: {node: '>=10'} 1083 | dependencies: 1084 | yallist: 4.0.0 1085 | dev: true 1086 | 1087 | /magic-string/0.25.9: 1088 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} 1089 | dependencies: 1090 | sourcemap-codec: 1.4.8 1091 | dev: true 1092 | 1093 | /ms/2.1.2: 1094 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1095 | dev: true 1096 | 1097 | /nanoid/3.3.1: 1098 | resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} 1099 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1100 | hasBin: true 1101 | dev: true 1102 | 1103 | /nanoid/3.3.4: 1104 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} 1105 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1106 | hasBin: true 1107 | dev: true 1108 | 1109 | /node-releases/2.0.6: 1110 | resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} 1111 | dev: true 1112 | 1113 | /path-parse/1.0.7: 1114 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1115 | dev: true 1116 | 1117 | /picocolors/1.0.0: 1118 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1119 | dev: true 1120 | 1121 | /postcss/8.4.12: 1122 | resolution: {integrity: sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==} 1123 | engines: {node: ^10 || ^12 || >=14} 1124 | dependencies: 1125 | nanoid: 3.3.1 1126 | picocolors: 1.0.0 1127 | source-map-js: 1.0.2 1128 | dev: true 1129 | 1130 | /postcss/8.4.16: 1131 | resolution: {integrity: sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==} 1132 | engines: {node: ^10 || ^12 || >=14} 1133 | dependencies: 1134 | nanoid: 3.3.4 1135 | picocolors: 1.0.0 1136 | source-map-js: 1.0.2 1137 | dev: true 1138 | 1139 | /prettier/2.7.1: 1140 | resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==} 1141 | engines: {node: '>=10.13.0'} 1142 | hasBin: true 1143 | dev: true 1144 | 1145 | /react/18.2.0: 1146 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 1147 | engines: {node: '>=0.10.0'} 1148 | dependencies: 1149 | loose-envify: 1.4.0 1150 | dev: true 1151 | 1152 | /resolve/1.22.1: 1153 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} 1154 | hasBin: true 1155 | dependencies: 1156 | is-core-module: 2.10.0 1157 | path-parse: 1.0.7 1158 | supports-preserve-symlinks-flag: 1.0.0 1159 | dev: true 1160 | 1161 | /rollup/2.78.1: 1162 | resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==} 1163 | engines: {node: '>=10.0.0'} 1164 | hasBin: true 1165 | optionalDependencies: 1166 | fsevents: 2.3.2 1167 | dev: true 1168 | 1169 | /safe-buffer/5.1.2: 1170 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 1171 | dev: true 1172 | 1173 | /semver/6.3.0: 1174 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 1175 | hasBin: true 1176 | dev: true 1177 | 1178 | /semver/7.3.7: 1179 | resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} 1180 | engines: {node: '>=10'} 1181 | hasBin: true 1182 | dependencies: 1183 | lru-cache: 6.0.0 1184 | dev: true 1185 | 1186 | /source-map-js/1.0.2: 1187 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1188 | engines: {node: '>=0.10.0'} 1189 | dev: true 1190 | 1191 | /source-map/0.6.1: 1192 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1193 | engines: {node: '>=0.10.0'} 1194 | dev: true 1195 | 1196 | /sourcemap-codec/1.4.8: 1197 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 1198 | dev: true 1199 | 1200 | /supports-color/5.5.0: 1201 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1202 | engines: {node: '>=4'} 1203 | dependencies: 1204 | has-flag: 3.0.0 1205 | dev: true 1206 | 1207 | /supports-preserve-symlinks-flag/1.0.0: 1208 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1209 | engines: {node: '>= 0.4'} 1210 | dev: true 1211 | 1212 | /svg-tags/1.0.0: 1213 | resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} 1214 | dev: true 1215 | 1216 | /to-fast-properties/2.0.0: 1217 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 1218 | engines: {node: '>=4'} 1219 | dev: true 1220 | 1221 | /typescript/4.8.3: 1222 | resolution: {integrity: sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==} 1223 | engines: {node: '>=4.2.0'} 1224 | hasBin: true 1225 | dev: true 1226 | 1227 | /update-browserslist-db/1.0.9_browserslist@4.21.4: 1228 | resolution: {integrity: sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==} 1229 | hasBin: true 1230 | peerDependencies: 1231 | browserslist: '>= 4.21.0' 1232 | dependencies: 1233 | browserslist: 4.21.4 1234 | escalade: 3.1.1 1235 | picocolors: 1.0.0 1236 | dev: true 1237 | 1238 | /vite/3.1.3: 1239 | resolution: {integrity: sha512-/3XWiktaopByM5bd8dqvHxRt5EEgRikevnnrpND0gRfNkrMrPaGGexhtLCzv15RcCMtV2CLw+BPas8YFeSG0KA==} 1240 | engines: {node: ^14.18.0 || >=16.0.0} 1241 | hasBin: true 1242 | peerDependencies: 1243 | less: '*' 1244 | sass: '*' 1245 | stylus: '*' 1246 | terser: ^5.4.0 1247 | peerDependenciesMeta: 1248 | less: 1249 | optional: true 1250 | sass: 1251 | optional: true 1252 | stylus: 1253 | optional: true 1254 | terser: 1255 | optional: true 1256 | dependencies: 1257 | esbuild: 0.15.8 1258 | postcss: 8.4.16 1259 | resolve: 1.22.1 1260 | rollup: 2.78.1 1261 | optionalDependencies: 1262 | fsevents: 2.3.2 1263 | dev: true 1264 | 1265 | /vue-tsc/0.40.13: 1266 | resolution: {integrity: sha512-xzuN3g5PnKfJcNrLv4+mAjteMd5wLm5fRhW0034OfNJZY4WhB07vhngea/XeGn7wNYt16r7syonzvW/54dcNiA==} 1267 | hasBin: true 1268 | peerDependencies: 1269 | typescript: '*' 1270 | peerDependenciesMeta: 1271 | typescript: 1272 | optional: true 1273 | dependencies: 1274 | '@volar/vue-language-core': 0.40.13 1275 | '@volar/vue-typescript': 0.40.13 1276 | dev: true 1277 | 1278 | /vue/3.2.39: 1279 | resolution: {integrity: sha512-tRkguhRTw9NmIPXhzk21YFBqXHT2t+6C6wPOgQ50fcFVWnPdetmRqbmySRHznrYjX2E47u0cGlKGcxKZJ38R/g==} 1280 | dependencies: 1281 | '@vue/compiler-dom': 3.2.39 1282 | '@vue/compiler-sfc': 3.2.39 1283 | '@vue/runtime-dom': 3.2.39 1284 | '@vue/server-renderer': 3.2.39_vue@3.2.39 1285 | '@vue/shared': 3.2.39 1286 | dev: true 1287 | 1288 | /yallist/4.0.0: 1289 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1290 | dev: true 1291 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - 'packages/**' 3 | - '!**/test/**' 4 | --------------------------------------------------------------------------------